源文件的编码会对编译结果有影响

简介:

结论:

1、Source Insight 3.50.63 不能显示编码为UTF8的源文件中的中文字符。ANSI编码的文件中的中文字符能正常显示。(最新的3.50.64版本也有同样问题)

2、Windows下无论源代码文件是UTF8还是ANSI,对编译结果无影响。

3、Linux下源代码文件是UTF8的中文显示正常,ANSI的中文乱码。

正文:(发现问题的经过)

今天偶然发现,在SI中,中文字符串显示为乱码。

image

但如果用notepad打开该文件,则不是乱码。从notepad打开的界面中复制到SI中,也不是乱码。

据此,可以推测,该文件保存为某种编码,使得SI不能正确显示。

用UE打开该文件,另存一个为ANSI格式的文件KtvMainScreen1.cpp:

image

然后再在SI中打开,中文显示正常了。

然后用BC打开,发现:原来的SI中乱码的文件是UTF-8格式的。

image
把左边选择为ANSI才能显示正常:

image

能否用另存的文件来代替原来的文件进行编译呢?那样会不会在软件中出现乱码?

后来,用下面代码测试中文显示,有一种写法中文显示正常。

#include <QApplication> 
#include <QPushButton> 
#include <QString>

int main(int argc, char *argv[]) 

    QApplication app(argc, argv);

    //QPushButton hello(QObject::trUtf8("世界您好!")); //Win7下运行时中文乱码 
    //QPushButton hello(QObject::tr("世界您好!"));//Win7下运行时中文乱码 
    QPushButton hello(QString::fromLocal8Bit("世界您好!"));//Win7下中文显示正常 
    hello.resize(100, 30);

    hello.show(); 
    return app.exec(); 

该文件为ANSI存储。另存为UTF8版本,编译后,中文显示仍然正常。

但二进制比较该源文件时,可以发现UTF8比ANSI每个汉字多一个字节。

image

由此可知,Windows上,源代码文件为UTF8还是ANSI编码,编译后都不会有乱码。

然后在Linux上也把两种文件都编译一次,发现UTF8的文件,中文正常;ANSI的文件,中文乱码。
















本文转sinojelly51CTO博客,原文链接:http://blog.51cto.com/sinojelly/269792,如需转载请自行联系原作者

相关文章
源文件与模块生成时的文件不同,是否希望调试器使用它?如何解决
源文件与模块生成时的文件不同,是否希望调试器使用它?如何解决
|
3月前
|
编译器 C++
错误 C1128 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
错误 C1128 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
159 0
|
1月前
|
存储 编译器 Linux
1.7.1 目标代码文件、可执行文件和库
C编程将源代码文件转换为可执行文件,此过程分为编译与链接两步。首先,编译器将源代码转化为中间代码,再由链接器将其余代码融合,最终生成可执行文件。此方法有助于程序模块化,允许独立编译各模块并在后期使用链接器整合,避免因单一模块变动导致整体重编。同时,链接器还会将用户程序与预编译库代码结合,生成完整程序。目标代码文件在链接前缺少启动代码及库函数,这些由链接器在最后阶段补充完整。
54 7
|
编译器 Linux 测试技术
【C/C++】C语言工程转C++工程,去除旧代码中的警告和错误
将 C语言项目转为C++项目更新维护,处理旧代码中的警告和错误
476 0
|
C++
VS下源文件中有多个代码时如何指定运行特定的代码(一个源文件下有多个代码时运行指定代码)
VS下源文件中有多个代码时如何指定运行特定的代码(一个源文件下有多个代码时运行指定代码)
261 0
|
自然语言处理 编译器 程序员
文件编译和预处理
文件编译和预处理
98 0
|
Java Maven Spring
类文件具有错误的版本 61.0, 应为 52.0
类文件具有错误的版本 61.0, 应为 52.0
3526 0
|
机器学习/深度学习 编译器 C语言
【程序的编译和预处理】源文件到可执行程序到底经历了什么?
【程序的编译和预处理】源文件到可执行程序到底经历了什么?
131 0
【程序的编译和预处理】源文件到可执行程序到底经历了什么?
编译好的编译ffmpeg又出错:更改输出目录产生各种古怪错误
编译好的编译ffmpeg又出错:更改输出目录产生各种古怪错误
99 0
|
Unix C++
源码文件编码问题,导致编译的程序运行错误
源码文件编码问题,导致编译的程序运行错误
120 0