qt里QSetting解析ini文件乱码的问题。

jinjiajie 2008-07-22 03:12:24
我使用Qsetting类:QSettings setting("popup.ini", QSettings::IniFormat);
来解析ini文件,但是读取中文的时候却是乱码。如 "我爱你 [b]"读进来本来按照qstring的话,应该有7个字长,现在却吧我爱你3个字以ascii读进来成了10个字长了。然后我爱你 部分就乱码了。
请问有没有解决方法,或者这种编码的解决方案,谢谢了
...全文
1851 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
2011-05-15
  • 打赏
  • 举报
回复
settings.setIniCodec("UTF-8");

还有,QSettings 只能用来解析 QSettings 自己产生的 ini 文件,不能用于解析一般的 ini 文件。
老邓 2011-05-15
  • 打赏
  • 举报
回复
建议:
1. 修改源码文件编码格式为GBK,而不是UTF-8。
2. 加入以下代码:
QTextCodec *codec = QTextCodec::codecForName("GBK");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
老邓 2011-05-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 jinjiajie 的回复:]
我使用Qsetting类:QSettings setting("popup.ini", QSettings::IniFormat);
来解析ini文件,但是读取中文的时候却是乱码。如 "我爱你 [b]"读进来本来按照qstring的话,应该有7个字长,现在却吧我爱你3个字以ascii读进来成了10个字长了。然后我爱你 部分就乱码了。
请问有没有解决方法,或者这种编码的解决方案,谢谢了
[/Quote]
读进来是10个字节,说明是UTF-8编码。
一个汉字3byte,共3个汉字。
输出时设置一下编码转换一下应该可以解决。
haofan001 2011-05-15
  • 打赏
  • 举报
回复
upooo
vanta 2009-01-15
  • 打赏
  • 举报
回复
up
xianyuxiaoqiang 2009-01-15
  • 打赏
  • 举报
回复
10字节不是对的么?

要看“我爱你”,设置一下输出的编码。
melody1128 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Simenv 的回复:]


QString类提供了一个Unicode文本和经典的C以零结尾的字符数组的抽象。

QString使用隐含共享,这使它非常有效率并且很容易使用。

所有的QString的方法都使用const char *参数,const char *被解释为经典的C风格的以零结尾的ASCII字符串。所以const char *参数为0是合法的。如果const char *不是以零结尾的,结果是不确定的。把经典的C字符串复制到QString的函数将不会复制结尾的0字符。QString的QChar数组(可以通过uni…
[/Quote]

up~
eastfind 2009-01-15
  • 打赏
  • 举报
回复
http://gimax.bokee.com/
去看看,可能对你有帮助哦
donwmufromdying 2008-08-01
  • 打赏
  • 举报
回复
请好好看看tr()和QTextCodec说明。或者去doc.trolltech.com去看国际化部分说明
Simenv 2008-08-01
  • 打赏
  • 举报
回复


QString类提供了一个Unicode文本和经典的C以零结尾的字符数组的抽象。

QString使用隐含共享,这使它非常有效率并且很容易使用。

所有的QString的方法都使用const char *参数,const char *被解释为经典的C风格的以零结尾的ASCII字符串。所以const char *参数为0是合法的。如果const char *不是以零结尾的,结果是不确定的。把经典的C字符串复制到QString的函数将不会复制结尾的0字符。QString的QChar数组(可以通过unicode()返回)通常不以零结尾。如果你需要把QString传递到一个需要C的以零结尾的字符串,请使用latin1()。

"co[b]"这个字符串按照unicode自然是10个字节的长度,中文每个单字双字节,字符与英文字母单字,结尾0一个字节。

其他的我可能没有楼主了解,我猜想出现乱码是因为你的程序无法解析Unicode的非英文字符。另外提供两个链接供楼主学习。

http://www.qtopia.org.cn/doc/qiliang.net/qt/qstring.html
http://baike.baidu.com/view/40801.htm


jinjiajie 2008-07-23
  • 打赏
  • 举报
回复
200分啊,就没人会么.....
jinjiajie 2008-07-22
  • 打赏
  • 举报
回复
为什么看到有回复却看不到???
hai040 2008-07-22
  • 打赏
  • 举报
回复
或是QTextCodec::setCodecFor***(QTextCodec::codecForName(***));
不过这个我试了好像没用
hai040 2008-07-22
  • 打赏
  • 举报
回复
试试QString::fromLocal8Bit(string)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧