QTOpia中文化
一:字符集介绍
我国已经颁布了多种中文信息编码标准,常用的有:GB2312-1980、GB12345、GB13000(GBK)以及最新标准GB18030,其中GB13000是对GB2312的扩展,又常被成为GBK,GB18030向下兼容GB2312和GBK,中文WINDOW98、中文WIN2000操作系统采用的中文字符集是GB2312。
GB2312字库仅覆盖双字节部分,存储位置索引是编码中每字节的第8bit置0得来的,如A1A1编码汉字在字库中的索引是2121,而非A1A1。以下是它的编码规则:
单字节:00~7F
双字节:A1~F7 A1~FE
GBK的编码规则是:
单字节:00~7F
双字节:81~FE 40~7E
80~FE
GB18030是最新的汉字编码标准,其编码为一、二、四变长编码:
单字节:00~7F
双字节:81~FE 40~7E
80~FE
四字节:81~FE 30~39 81~FE 30~39
Unicode编码采用等长编码,二个字节表示一个字符编码,对于ASCII码也采用双字节来表示,unicode使用二维空间来描述编码空间,平面分为256行、256列,对应于编码的高低字节。
二:Qt 国际化编程
在文本显示上,Qt 使用了Unicode 作为内部编码,为了程序的国际化,通常我们在文本显示的地方不直接输入本地字符,用英文代替,比如要编写一中文界面的 Qt 程序,应该在程序中使用英文,程序编写完成后,把文本提取出来翻译。对于需要翻译的地方,首先是在该文本处用tr()函数标识,同时制作出.qm信息文件,并在程序中加入QTranslator即可。比如我们在某一程序中有如下语句:
setCaption(tr(“main window”));
为了能显示中文,有两种方法:
方法一:
l 修改工程文件,加上TRANSLATIONS = xxx.ts
l lupdate 工程文件名
l 用linguist编辑刚生成的xxx.ts文件并保存
l lrelease 工程文件名 xxx.qm
l 在main.cpp中加入QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);
qApp->setFont(font1);
QTranslator *translator = new QTranslator(0);
translator->load("xxx.qm",".");
qApp->installTranslator(translator);
方法二:
l findtr 文件名(通常为CPP文件) > xxx.po
l 编辑po文件,其中charset需由iso-8859-1改为GB2312,然后将“main window”翻译成“主窗口”
l msg2qm –scope zh_CN.GB2312 xxx.po xxx.qm
l 在main.cpp中加入QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);
qApp->setFont(font1);
QTranslator *translator = new QTranslator(0);
translator->load("xxx.qm",".");
qApp->installTranslator(translator);
方法三:
有时我们只是提供给本地用户使用,无需国际化,QT提供这一支持,在QT中有许多本地字符集同unicode的转换引擎,他们皆为QTextCodec的派生类,如QGbkCodec、QJisCodec, QHebrewCodec等。如:
QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);
qApp->setFont(font1);
QString caption=“主窗口“;
QTextCodec *gk_codec=QTextCodec::codecForName(“GBK”);
setCaption(gk_codec->toUnicode(caption));
从上面可以看出,使用转换引擎可以轻松实现中文显示,简要步骤如下:
1:修改main.cpp文件,将字体改