问一个WidecharToMultiBytes的问题
有一个程序,其中一个功能是把一些string转换成utf8,然后保存起来,以后读出来的时候,再从utf8转换回来。这个是用QT里面的Qstring实现的。我现在想在一个简单的测试程序上实现这个功能,但是用MultiBytesToWideChar和WideCharToMultiBytes的时候都要指定code page的,光使用如果只是用CP_ACP和CP_UTF8貌似不行。问题在于我用这个测试程序去读真正的那个程序保存的内容,其中有一个中文字符,已经被转换成utf8了,我用MultiBytesToWideChar转换成UNICODE的时候,可以调试看到UNICODE string是没问题的,但是用WideCharToMultiBytes,参数CP_ACP,这时候这个中文字符就变成问号(?)了。
我知道这是因为这个不能正常的在ANSI的code page下转换,所以用默认字符问号(?)代替了。除非我指定code page为GB,不然就总是问号。我想在输入的时候也有相应的问题,我可能没法在ANSI的code page下输入中文。
我是想问,难道QT的Qstring自动识别了输入内容的code page?还是把安装了的code page每个都试了一遍?有什么办法在不写死code page为GB的情况下能让WideCharToMultiBytes正确转换这个string?
回复 #1 fred_au 的帖子
你的程序是在Windows平台运行的吗?我不知道QT的具体原理,估计是有一个自动检测源encoding的函数,不过这种函数可能不会100%准确(因为很多字符的编码是冲突的),还是有风险的,如果可能,还是指定源encoding比较好。
如果是Linux的,可以试试iconv的函数库或php的相关函数,参考这个帖子:
http://hi.baidu.com/demonsnearby/blog/item/74245b25cb40a008918f9db2.html 是在windows上的,MultiBytesToWideChar和WideCharToMultiBytes都是windows的函数。 我想到了另一个可能性,QTString可能是UNICODE的,UNICODE和UTF8之间的转换是没有问题的。 我不知道原理阿,不过也许下面QT的文档有帮助。
Detailed Description
The QString class provides a Unicode character string.
QString stores a string of 16-bit QChars, where each QChar corresponds one Unicode 4.0 character. (Unicode characters with code values above 65535 are stored using surrogate pairs, i.e., two consecutive QChars.) 学习乐:tk_45 嗯。。。我想QTString在程序UNICODE enabled的情况下自动支持UNICODE,所以我在原本那个程序上看到的只是UNICODE和UTF8之间的转换。
所以要转换到ANSI还是GB,还是要指定code page才行。
回复 #7 fred_au 的帖子
嗯,UTF8只是UNICODE的一种表现形式,二者本质上是同一个东西,当然没有问题。 原帖由 xiaohaowan 于 15-2-2010 15:53 发表 http://www.freeoz.org/bbs/images/common/back.gif学习乐:tk_45
学习乐是什么意思?我们以前认识么?哪里见过? 苍天阿。。。。你在玩我么。。。
页:
[1]