• 4710阅读
  • 3回复

[提问]默认的QTextcodec在Mac 10.6上无法识别本地中文编码? [复制链接]

上一主题 下一主题
离线royt
 

只看楼主 倒序阅读 楼主  发表于: 2012-10-26
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
我看了Qt的源代码,QTextCodec在初始化的时候用的是codecForName("System"); 在Windows平台上,初始化为QWindowsLocalCodec,QString类的fromLocal8Bit函数可以正确把本地编码转化为QString(UTF16格式)。但是在Mac平台上,初始化为QIconvCodec,iConv是个第三方库,用于编码的转化,用iconv函数转化之前需要先调用iconv_open(char *to, char *from)进行初始化,就是确定源和目标的编码格式。我用调试器跟踪了一下,走到iconv_open("UTF-16LE", "")这一步并保存返回的标识符。空字符串参数的意思就是local编码。


我在mac的"系统偏好 | 语言"里面选择第一优先是简体中文,意思就是local编码应选择中文,但是事实上iconv函数无法转化GB2312的编码串,执行出错然后得到乱码?这是怎么回事?
离线nmiirq

只看该作者 1楼 发表于: 2012-10-27
没有遇到你说的问题。用System是OK的。
离线royt

只看该作者 2楼 发表于: 2012-10-29
回 1楼(nmiirq) 的帖子
请问你 用的什么版本的系统呢。。我的mac系统初始化是英文的,然后我在系统Prefereces的Language一项设置为简体中文为优先语言。Qt4.7里面的fromLocal8Bit函数用到的Iconv库在将本地编码转化为unicode的时候,总是会走到这一步“iconv_open("UTF-16LE", "")”,我试了一下发现空字符串参数代表的默认的本地编码是UTF-8. 所以一个GB2312的串当做UTF-8来转Unicode肯定失败的。但是法语德语那些latin系的西欧字符就没问题。
离线nmiirq

只看该作者 3楼 发表于: 2012-11-04
我的是中文的。
你改完语言后要注销或重启一下吧。
快速回复
限100 字节
 
上一个 下一个