在编程中遇到这样的问题:
用CopyMemory讲外部的一段字符串拷入,Byte数组储存了字符串的信息,使用StrConv转换为Unicode输出,英文可以正确显示,但中文全是乱码,如果不转换,什么也没有。
自己调试,发现“首”字在数组中的十六进制对应为E9 A1 B5(不清楚是什么编码),其中每个汉字都有3个字节,而英文(ascii<129)的都是一个字节,而“首”的Unicode应该为&H9996,不知应该如何将E9 A1 B5转换为&H9996???另外将数组全部存入一个txt文件中,用xp中的记事本或UltraEdit可以正常显示,说明它们能够正确转换,而用winhex或vb程序中读入则不能正常显示!有那位大侠知道??
用CopyMemory讲外部的一段字符串拷入,Byte数组储存了字符串的信息,使用StrConv转换为Unicode输出,英文可以正确显示,但中文全是乱码,如果不转换,什么也没有。
自己调试,发现“首”字在数组中的十六进制对应为E9 A1 B5(不清楚是什么编码),其中每个汉字都有3个字节,而英文(ascii<129)的都是一个字节,而“首”的Unicode应该为&H9996,不知应该如何将E9 A1 B5转换为&H9996???另外将数组全部存入一个txt文件中,用xp中的记事本或UltraEdit可以正常显示,说明它们能够正确转换,而用winhex或vb程序中读入则不能正常显示!有那位大侠知道??
这个问题我已经解决了,谢谢各位参与。
关于UTF-8的资料可以参考http://www.linuxforum.net/books/UTF-8-Unicode.html
00000000 - 0000007F: 0xxxxxxx
00000080 - 000007FF: 110xxxxx 10xxxxxx
00000800 - 0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
00010000 - 001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
00200000 - 03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
04000000 - 7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxxxxx 的位置由字符编码数的二进制表示的位填入. 越靠右的 x 具有越少的特殊意义. 只用最短的那个足够表达一个字符编码数的多字节串. 注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目