1、字符集
字符 Character:文字符号。
字符集 Charset:字符的集合,规定一系列字符与数字的关系(编码)。
字符集都是由一些组织制定和发布的,例如ISO/IEC就负责制定字符集。
每个字符集都有一个标准编号,例如,ASCII字符集的编号为ISO/IEC 646(即,由ISO/IEC发布第646号标准文档)。
2、拉丁字符集
拉丁字符集,收录了欧洲各个国家的字符,例如,希腊字母Aα Bβ。
拉丁字符集的编号为ISO 8859系列,例如,ISO8859-1字符集,也就是Latin-1,是西欧常用字符,包括德法两国的字母。ISO8859-2字符集,也就是Latin-2,收集了东欧字符。
注意:拉丁字符的总数远远超过了256个,无法用一个char型表示,得用2个字节表示。所以,即使不使用中文,外文字符的表示也是有问题的。
char a = ‘α’;// 这就有问题了
问题的原因是相同的,无法用一个字节来表示一个字符。
ASCII码:0-127之间,最高位0,拉丁字符:最高位1。以此来区分。
3、中文字符集
GB2312,中文简体国标码(6763个汉字);
GBK,扩展中文GB编码(兼容GB2312);(工具UltraEdit)
GB18030,用1-4个字节编码,容量超大;
BIG5,中文繁体编码;
CJK,中日韩大字符集编码;
Unicode,统一码,用0-0x10FFFF来映射全球各国的语言文字。
Unicode编码方案:
①UTF-32编码:每个字符用一个int来表示;
②用1-2个short来表示一个字符;
③UTF-8编码:用1-4个字节来表示一个字符(比较节省空间)
注意:windows中.cpp文件中的汉字都是以GBK格式编码的,其他平台可能会不一样。所以,如果想以Unicode格式输出,需通过某些方法来转换。
4、QString相关转换
Qt是一个跨平台的框架,它封装了一个QString类来代表字符串,是一个Unicode16编码的类。
void MyWin3::TestBtnClicked() {
QString str = "哈哈";
ui.lineEdit->setText(str);
}
image.png
void MyWin3::TestBtnClicked() {
QString str = QString::fromLocal8Bit("哈哈");
ui.lineEdit->setText(str);
}
image.png
5、程序发布注意事项
当程序中带有中文转换处理时,需要将Qt使用的文字编码库一同发布。
Windows下Qt应用程序:
①找到Qt的编码库:C:\x.x.x\plugins\codercs
②拷贝codecs文件夹到工程exe文件所在目录下。
③把vs的运行时库也要拷贝到cedecs目录下。(mvcm/mvcp/mvcr)
网友评论