问题描述
我用VC写了一个小程序,从Access数据库读取数据,然后拷贝到剪贴板,然后输出到文本文件。中文出现乱码。此时,默认输入法是英文。但是很奇怪,当把系统的默认输入法修改为汉字输入法,重新启动程序,拷贝到剪贴板的内容再输出到文本文件中就是好的,不乱码。在两种情况下我都跟踪了程序中汉字的编码,将char转换为BYTE类型的值是一样的。比如“汉”这个字GB2312的编码是0xBABA对应十进制的值是a=186,b=186取值如下:BYTEa=*gb2312;BYTEb=*(gb2312+1);文本文件编码采用系统默认编码,操作系统为中文windowsXP。在乱码的情况下,拷贝到文本文件的值在16进制下查看为0x6F6F,而不是0xBABA。但是拷贝到Unicode格式的文本文件中会变成:BA00BA00,被扩展了两个0.非常奇怪。而“汉”这个字,其Unicode编码值应该是0x6c49,在文件中该是496C这样排列。请指点,如何来处理才能不靠切换默认输入法为中文来实现输出到文本文件不乱码。
解决方案
解决方案二:
这个和输入法没有关系。和系统默认字体编码codepage有关系你用UTF-8格式做拷贝这样就会解决你这个问题。
解决方案三:
字体转换关系如下ansi==>>unicode==>>UTF-8utf8==>>unicode>>ansi
解决方案四:
是把汉字存在数据库中的时候把它转换为utf-8?然后读出来的自然就是utf-8,然后把utf-8转换为unicode?然后再转换为ansi,最后这步是在程序中实现么?我不转换,直接申请三个字节的空间,比如char*a=(char*)malloc(3);然后,直接把这三个字节赋值*a=0xBA;*(a+1)=0xBA;*(a+2)=0x00;然后把这三个字节拷贝到剪切板。其实,你从utf-8==>unicode==>ansi最后还不是要把编码转换成GBK的编码么?“汉”字的ansi编码就是0xBABA,但是从剪切板拷贝到文本文件里面就变了,变成6F6F了。