FreeOZ论坛
标题:
问一个WidecharToMultiBytes的问题
[打印本页]
作者:
fred_au
时间:
12-2-2010 18:32
标题:
问一个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?
作者:
ubuntuhk
时间:
13-2-2010 13:14
标题:
回复 #1 fred_au 的帖子
你的程序是在Windows平台运行的吗?
我不知道QT的具体原理,估计是有一个自动检测源encoding的函数,不过这种函数可能不会100%准确(因为很多字符的编码是冲突的),还是有风险的,如果可能,还是指定源encoding比较好。
如果是Linux的,可以试试iconv的函数库或php的相关函数,参考这个帖子:
http://hi.baidu.com/demonsnearby ... 40a008918f9db2.html
作者:
fred_au
时间:
15-2-2010 09:11
是在windows上的,MultiBytesToWideChar和WideCharToMultiBytes都是windows的函数。
作者:
fred_au
时间:
15-2-2010 14:33
我想到了另一个可能性,QTString可能是UNICODE的,UNICODE和UTF8之间的转换是没有问题的。
作者:
GPS
时间:
15-2-2010 14:49
我不知道原理阿,不过也许下面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.)
作者:
xiaohaowan
时间:
15-2-2010 14:53
学习乐
作者:
fred_au
时间:
15-2-2010 15:32
嗯。。。我想QTString在程序UNICODE enabled的情况下自动支持UNICODE,所以我在原本那个程序上看到的只是UNICODE和UTF8之间的转换。
所以要转换到ANSI还是GB,还是要指定code page才行。
作者:
ubuntuhk
时间:
15-2-2010 16:06
标题:
回复 #7 fred_au 的帖子
嗯,UTF8只是UNICODE的一种表现形式,二者本质上是同一个东西,当然没有问题。
作者:
fred_au
时间:
15-2-2010 23:30
原帖由
xiaohaowan
于 15-2-2010 15:53 发表
登录/注册后可看大图
学习乐
学习乐是什么意思?我们以前认识么?哪里见过?
作者:
fred_au
时间:
16-2-2010 00:25
苍天阿。。。。你在玩我么。。。
欢迎光临 FreeOZ论坛 (https://www.freeoz.org/ibbs/)
Powered by Discuz! X3.2