首先:你的标题和贴中代码 都是说 读取中文文件乱码的解决方案。这和你tips中提到的C++源码采用何种编码,是两个既然不同的问题。
第一:这两个只是个例子,实际上任何qt支持的编码都没问题,而且这个是codec插件做的,可以自己编写替换,所以可以做到任意编码都支持.
Qt肯定可以读取任何它支持的编码的中文文件,这没人否认。但是乱码根源在于,你不知道读取的中文文件是何种编码。
第二:这个文中有对立或者错误的地方么?
你首帖中说的是:window下则是gb2312编码。事实上只有简体中文Windows下如此
第三:ps3属于tip,说明gb2312代码下,文本注释中写入中文,是安全的,而其他编码,是可能导致编译错误的.这段描述的是源代码文件. 顺便也说了不要使用这个方案:QStringLiteral("中文")(部分编码下这样的代码可能引起编译错误,而且和cpp文件本身的编码有关系,不通用,建议使用tr+qm)
呵呵,我是提倡用tr+qm的,但是提倡并不能解决问题。
你这儿描述的东西,只是你在简体中文windows下用VS2005及以上版本时,看到的一种表象。如果你知道了出错原因是什么,问题自然就明朗了。
gb2312远远没有你想象的好用。
第四:用哪个国家的windows编译代码根本不是问题,vs是可以手动调编码的,调了gb2312一样认.
说实话,这个似乎有点意思。VS下C++的编译器是 cl.exe,我还真不知道它有可以控制C++源码文件编码的选项。
第五:ps4是指不要使用这个方案 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK")); QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); 解决中文乱码问题,但是QT5却对以上函数中的两个已经不支持。 这个方案,在非中文windows下面真的会出问题,而且几乎任意非window平台都会出问题
嗯,我应该算是该用法强烈的抵制者(之一)吧。但在Qt4时期,网络上国内这种错误用法太多了。
不过,平心而论,直接用GBK这种还算是稍微好的了(比system那种好多了)。而且在非windows平台下,也不会有多大问题。
最后:乱码的根源是编码不一致.qt使用的是unicode,但是系统里面的文件指不定什么的.对于未知文本文件,文中解决方案是,使用iconv判断.
乱码的根源是不知道编码,而不是不一致。 对于一个文本文件来说,如果不知道它的编码,理论上是猜不出它的编码的,任何工具都没有用。
|