• 7606阅读
  • 9回复

[提问]跨平台源码文件编码如何选择? [复制链接]

上一主题 下一主题
离线ashe0817
 

只看楼主 倒序阅读 楼主  发表于: 2014-05-01
Qt设置的UTF-8编码,BOM总是删除编译器是MSVC2013

因为要设置工程信息,在.pro文件中写了中文,像这样的

QMAKE_TARGET_PRODUCT = "测试工程"

最后查看编译出的exe也可想而知,文件说明属性中都是乱码。。。。

如果用gbk编码的话的确没问题,但是用gbk的话在linux下应该是不会被识别的吧?

难道得弄两个不同编码的.pro文件?
离线ashe0817

只看该作者 1楼 发表于: 2014-05-01
现在的问题大概就是msvc不能处理utf8编码的源文件?
离线dbzhang800

只看该作者 2楼 发表于: 2014-05-01
1. 截止目前,Qt的 .pro/.pri/.prf/.prl 不支持非ASCII字符。尽管在简体中文Windows下你可以用GBK编码,但没有任何保证。

2. 一般提到的的源文件的编码,是指 .h/.cpp 等文件的 编码(源码字符集和执行字符集)。
离线ashe0817

只看该作者 3楼 发表于: 2014-05-01
回 dbzhang800 的帖子
dbzhang800:1. 截止目前,Qt的 .pro/.pri/.prf/.prl 不支持非ASCII字符。尽管在简体中文Windows下你可以用GBK编码,但没有任何保证。
2. 一般提到的的源文件的编码,是指 .h/.cpp 等文件的 编码(源码字符集和执行字符集)。 (2014-05-01 15:53) 

好吧,看来不能这样写资源文件了。这样写应该是win下特有的吧
离线dosmlp

只看该作者 4楼 发表于: 2014-05-04
pro文件要去掉BOM头才行吧,不然不能识别,我一般是统一使用utf8编码,包括源文件,
离线dbzhang800

只看该作者 5楼 发表于: 2014-05-04
回 dosmlp 的帖子
dosmlp:pro文件要去掉BOM头才行吧,不然不能识别,我一般是统一使用utf8编码,包括源文件, (2014-05-04 13:45) 

背景是这样的,在Qt5.0发布之前,已经确定所有的源文件都应该是utf8编码。但是到了pro/pri/prf这些工程文件时,utf8出现了问题,主要是qmake没有办法在生成Makefile时,智能地将这些utf8编码的东西,转成平台需要的字符集(这里面涉及的东西太多了)。

于是,决定,这些工程文件只支持ASCII字符集。你可以使用系统locale字符集,但没有跨平台的保证。之所以遇到BOM,会直接给出错误,就是为了明确告诉用户,qmake不支持utf8
离线dosmlp

只看该作者 6楼 发表于: 2014-05-04
回 dbzhang800 的帖子
dbzhang800:背景是这样的,在Qt5.0发布之前,已经确定所有的源文件都应该是utf8编码。但是到了pro/pri/prf这些工程文件时,utf8出现了问题,主要是qmake没有办法在生成Makefile时,智能地将这些utf8编码的东西,转成平台需要的字符集(这里面涉及的东西太多了)。
于是,决定,这些工程文件只 .. (2014-05-04 14:31) 

不过我把pro文件转换成utf8编码也没出现什么问题
好像我现在的qtcreator默认创建的pro文件就是utf8编码的
离线dbzhang800

只看该作者 7楼 发表于: 2014-05-04
回 dosmlp 的帖子
dosmlp:不过我把pro文件转换成utf8编码也没出现什么问题
好像我现在的qtcreator默认创建的pro文件就是utf8编码的 (2014-05-04 15:14) 

qtcreator创建的pro文件应该是不带任何编码信息的吧?

另外,你有没有测试过,真的用了utf8中的非ASCII字符,比如某个路径中含有中文,那么你这个pro文件在Windows下能工作正常么?

离线dosmlp

只看该作者 8楼 发表于: 2014-05-04
回 dbzhang800 的帖子
dbzhang800:qtcreator创建的pro文件应该是不带任何编码信息的吧?
另外,你有没有测试过,真的用了utf8中的非ASCII字符,比如某个路径中含有中文,那么你这个pro文件在Windows下能工作正常么?
....... (2014-05-04 15:23) 

pro也是个文本文件啊,怎么会没有编码
路径中带中文这个没试过,在qt中写程序路径我都不带中文和空格,这样好像真的不能正常工作
离线dbzhang800

只看该作者 9楼 发表于: 2014-05-04
呵呵,

1. 纯文本文件自身是不包含任何编码信息,这也是html/xml/py 等各种文本文件都通过格式定义来指定一个编码的原因所在。同样是这个原因,Windows为它的utf8编码的文本文件创造了一个称之为BOM的东西。

2. 你想表达的是说,你的pro内所用的字符没有超出ASCII编码的范围,对么?话句话,你潜意识中也是认为它只支持ASCII?
快速回复
限100 字节
 
上一个 下一个