查看完整版本: [-- 也许是关于Qt中文或Unicode的问题(我也不知道算不算) --]

QTCN开发网 -> Qt中文处理 -> 也许是关于Qt中文或Unicode的问题(我也不知道算不算) [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

coolcoolkid 2015-07-06 09:35

也许是关于Qt中文或Unicode的问题(我也不知道算不算)

首先我的环境
Qt Creator 3.4.1 (opensource)
Based on Qt 5.4.2 (MSVC 2013, 32 bit)

我遇到的问题就围绕着一个汉字“闸”

测试代码见下文,测试代码1出现编译错误,而测试代码2完美运行。求大神给解释编译错误的原因或者解决错误就可以

编译器代码1的输出
warning: C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
error: C2001: newline in constant (就指向我添加的唯一的一行代码)
error: C2143: syntax error : missing ')' before '}' (指向我的代码下一行)

测试代码(两段代码只有一个地方不同)



代码1:
  1. #include <QCoreApplication>
    #include <QDebug>

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);

        qDebug() << "闸";    //两段代码唯一的差别就在这里

        return a.exec();
    }
代码2:
  1. #include <QCoreApplication>
    #include <QDebug>

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);

        qDebug() << "闸闸";    //两段代码唯一的差别就在这里

        return a.exec();
    }




dbzhang800 2015-07-06 09:40
原因呢,你贴的warning中说的很清楚了。解决办法呢,本版置顶中也说差不多了。

coolcoolkid 2015-07-06 10:25
dbzhang800:原因呢,你贴的warning中说的很清楚了。解决办法呢,本版置顶中也说差不多了。 (2015-07-06 09:40) 

额,你没仔细看我的帖子吧

我的意思是为什么仅一字之差就出现了这个编译错误

dbzhang800 2015-07-06 10:55
coolcoolkid:额,你没仔细看我的帖子吧
我的意思是为什么仅一字之差就出现了这个编译错误 (2015-07-06 10:25) 

我知道你的意思,你的两个都是错的。
只不过一个MSVC能一条道走到黑,一个走不下去罢了。

dbzhang800 2015-07-06 11:19
你的源码是不带BOM的UTF8格式,但是MSVC不知道你用的UTF8。由于你在简体中文Windows系统下,它就认为你用的是GB18030(也叫GB2312,GBK,CP936)。

当你一个汉字时,占3个字节,用GB18030是无法解析的(1个半汉字)。当你2个汉字时,占6个字节,用GB18030碰巧可以解释成3个汉字。

realfan 2015-07-06 11:28
LZ的代码原来的格式,无法按GB2312解析。即使编译没有出错,也是运气,不保证能运行时是正常的。
可以在VS的,菜单File->Advanced save options,把Encoding选择成UTF8 with siganature code page65001,保存。再试试

coolcoolkid 2015-07-06 11:40
dbzhang800:你的源码是不带BOM的UTF8格式,但是MSVC不知道你用的UTF8。由于你在简体中文Windows系统下,它就认为你用的是GB18030(也叫GB2312,GBK,CP936)。
当你一个汉字时,占3个字节,用GB18030是无法解析的(1个半汉字)。当你2个汉字时,占6个字节,用GB18030碰巧可以解释成3个汉字。 (2015-07-06 11:19)

太感谢版主的耐心解答!我明白我的错误所在了

其实我这个错误最初是发现于一个下拉表(comboBox)的构造函数中,利用一系列的中文字符串对它进行初始化。碰巧只有一个中文字符串是奇数个汉字而其他的都是偶数个,因此才出现了我上面提问中的假象,我错误地以为是这个中文字符串中有什么特殊的字符。

明白这个问题之后回过头来看看,发现自己的这个提问真的是。。。。。。版主对新手真的是很有耐心~

再次感谢版主

coolcoolkid 2015-07-06 15:38
realfan:LZ的代码原来的格式,无法按GB2312解析。即使编译没有出错,也是运气,不保证能运行时是正常的。
可以在VS的,菜单File->Advanced save options,把Encoding选择成UTF8 with siganature code page65001,保存。再试试 (2015-07-06 11:28)

嗯嗯,我已经知道错在那里了。。。

请问以下Qt Creator在哪里调~我一直都找不到。。。

coolcoolkid 2015-07-06 15:40
问题已经解决了,谢谢~

realfan 2015-07-06 15:58
coolcoolkid:
嗯嗯,我已经知道错在那里了。。。
请问以下Qt Creator在哪里调~我一直都找不到。。。


[attachment=13994]
这里吧

另外,对已经存在的文件,可以用Notepad++之类的工具,转换编码格式。


查看完整版本: [-- 也许是关于Qt中文或Unicode的问题(我也不知道算不算) --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled