在编程中遇到这样的问题:
用CopyMemory讲外部的一段字符串拷入,Byte数组储存了字符串的信息,使用StrConv转换为Unicode输出,英文可以正确显示,但中文全是乱码,如果不转换,什么也没有。
自己调试,发现“首”字在数组中的十六进制对应为E9 A1 B5(不清楚是什么编码),其中每个汉字都有3个字节,而英文(ascii<129)的都是一个字节,而“首”的Unicode应该为&H9996,不知应该如何将E9 A1 B5转换为&H9996???另外将数组全部存入一个txt文件中,用xp中的记事本或UltraEdit可以正常显示,说明它们能够正确转换,而用winhex或vb程序中读入则不能正常显示!有那位大侠知道??

解决方案 »

  1.   

    winhex支持nuicode这种hex editer都是ascii 的吧
      

  2.   

    我现在已经知道E9 A1 B5是UTF-8的编码了
      

  3.   

    3个字节?有意思!StrConv我经常使用从来没有出现3个字节的情况。
      

  4.   

    那是你没见过,6个字节的都有(理论情况)。
    这个问题我已经解决了,谢谢各位参与。
    关于UTF-8的资料可以参考http://www.linuxforum.net/books/UTF-8-Unicode.html
      

  5.   

    单个字符unicode对应的utf-8编码的填充方式:unicode               utf-8
    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"的数目就是整个串中字节的数目
      

  6.   

    哎,CSDN真该换服务器了,这点东西足足回复了8遍才成功
      

  7.   

    CopyMemory不知道,但前几天我也遇到类似的问题。从sqlserver2000中倒出到txt文件中的汉字,再用vb的line input读取时变成乱码。后来用fso文件方式就可以了。