Chinaunix首页 | 论坛 | 博客

分类: C/C++

2014-02-10 13:42:05

首先说明下源代码文件本身的编码,
现在对于中文程序员,一般最常见就有两种编码方式一个是GBK,一个是UTF-8。
在windows环境中,有一个所谓的BOM的。如果文件是值0xEF 0xBB 0xBF开头,则这个BOM可以说明该文本文件是一个UTF-8编码的文件。

如果使用的是MinGW4.4编译器的话:
假如源代码文件是一个GBK编码的文件。则
char a[100] = "中文";
会导致a数组中的值是 D6 D0 CE C4 ... 这就是GBK的"中文"二字的编码。
假如源代码文件是一个UTF-8编码的文件。则
char a[100] = "中文";
会导致a数组中的值是 E4 B8 AD E6 96 87 ... 这就是UTF-8的"中文"二字的编码。
如果使用的是MS VC 2008一系列的编译器的话:
编译器会检查文件编码,如果是UTF-8的话,他会把这个源代码文件转换编码为GBK后再编译。
也就是说源代码文件是一个UTF-8编码的文件。则
char a[100] = "中文";
一样会导致a数组中的值是 D6 D0 CE C4 ... 即GBK的编码。
这一点很诡异。我使用的是中文版windows和中文版VS。我并没有考察过何时它会转码,何时不转码。


QString 内含内部编码(是Unicode),转到哪种都可以。

QTextCodec* gbk = QTextCodec::codecForName("GBK");
QTextCodec* utf8 = QTextCodec::codecForName("UTF-8");

编码器可以把QString转换为自己的编码:
QByteArray ba = gbk->fromUnicode(QString);
char* c = ba.data();


构造QString时需注意,如下书写形式:
QString("中文");
时,根据全局函数
QTextCodec::setCodecForCStrings(QTextCodec* codec);
所设定的codec对引号内的数据进行扫描和解码。

阅读(3180) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册