C++学习笔记(六) - Qt 跨平台

Qt跨平台编程会有一个问题,这是我在Ubuntu下开发然后转移到windoes上时遇到的,错误如下:
首先是提示几个warning:

F:\Qt_program\SCserver1_0\websocketserver.h:-1: warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

接着就会爆出一大堆的错误,都是由于编码问题导致的,一般是因为程序中或者注释里含有中文。

1 解决问题

问题的原因后面再说。
首先是下载一个Encoder,这是一个编码转换的工具:

C++学习笔记(六) - Qt 跨平台_第1张图片
Encoder.png

要自己在系统配置中添加需要转换的文件类型:

C++学习笔记(六) - Qt 跨平台_第2张图片
添加文件类型.png

源和目标自己选,最好在桌面上新建一个文件夹,把要转换的文件放进来,参数如图选择,或者看下面的解释。

C++学习笔记(六) - Qt 跨平台_第3张图片
参数

然后把转换出来的文件放回去覆盖源文件就好了。

2 原因

之所以Ubuntu上面的工程放在windows上面会乱码,实际上是因为,Ubuntu环境默认的编码是utf-8,windows默认的是GBK,所以都是用默认的时候,换过来就不能用了。
如果该工程要跨平台使用(win+linux),那么工程设置请使用UTF-8+BOM的编码方式,这个我没有实践过,我觉得应该是可以的:
Qt Creator,菜单->工具->选项->文本编辑器->行为->文件编码:
默认编码:System(简体中文windows系统默认指的是GBK编码,即下拉框选项里的GBK/windows-936-2000/CP936/MS936/windows-936)

C++学习笔记(六) - Qt 跨平台_第4张图片
配置Qt.png

3 科普

Qt常见的两种编码是:UTF-8和GBK★UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。
★GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。GBK是GB2312的扩展,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名。
★GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:GBK、GB2312--Unicode--UTF8UTF8--Unicode--GBK、GB2312
★在简体中文windows系统下,ANSI编码代表GBK/GB2312编码,ANSI通常使用0x800xFF范围的2个字节来表示1个中文字符。0x000x7F之间的字符,依旧是1个字节代表1个字符。Unicode(UTF-16)编码则所有字符都用2个字节表示。

你可能感兴趣的:(C++学习笔记(六) - Qt 跨平台)