随笔-26  评论-111  文章-19  trackbacks-0

关于Unicode

Unicode是一个16位的字符集,它可以移植到所有主要的计算机平台并且覆盖几乎整个世界。它也是单一地区的;它不包括代码页或者其它让软件很难读写和测试的复杂的东西。现在还没有一个合理的多平台的字符集可以和它竞争。由于以上原因,Trolltech公司从Qt 2.0开始选择Unicode作为它天然的字符集。

在互联网上关于Unicode的信息。

Unicode协会提供了大量的文档,包括

标准

标准当前的版本是3.0.1。

Qt中的Unicode

在Qt中,和大多数使用Qt的应用程序中,几乎所有的或全部的用户可见的字符串都被使用Unicode方式存储。Qt提供了:

  • 对于文件输入输出,和传统的编码格式的互译——请看QTextCodecQTextStream
  • 从输入法和8位键盘输入的翻译。
  • 对于屏幕上显示,翻译到传统字符集。
  • 一个字符串类,QString,存储Unicode字符,它支持包括快速的(高速缓存的)和US-ASCII互译的C字符串的移植,并且支持所有常用的字符串操作。
  • 在适当的时候使用支持Unicode的窗口部件。
  • Unicode支持在Windows 95/98/NT/2000上的检测,这样Qt就可以在那些甚至不支持Unicode的Windows平台上提供Unicode。

为了获得Unicode的益处,我们建议使用QString来存储所有用户可见的字符串并且使用QTextStream来处理所有文本文件输入输出。在你写的任何一个自定制的窗口部件中使用QKeyEvent::text()来处理键盘输入;它对于西欧或者北美的速度较慢的打字员来说没有什么不同的,但是对于那些速度较快或者使用特殊输入法的人们来说使用text()是有好处的。

在Qt中所有可能是用户可见字符串的函数参数,QLabel::setText()和很多其它函数,使用const QString &来作为类型。QString对于像下面这样的const char *工作的

        myLabel->setText( "Hello, Dolly!" );

提供了隐式调用。还有一个函数QObject::tr()也提供翻译支持,像这样:

        myLabel->setText( tr("Hello, Dolly!") );

tr()(有时被简化)从const char *映射到Unicode字符串,并且使用QTranslator对象来进行这个映射。

程序需要和其它程序进行通讯或者使用传统文件格式进行读写文件,Qt提供了大量的内置的QTextCodec类,这些类知道如何在Unicode和传统编码之间进行翻译。

默认地,和const char *的互相转换使用基于本地的编码解码器。无论如何,程序都能够很容易地找到其它地区的编码解码器,并且可以对于任何一个打开的文件或者网络连接使用一个特殊的编码解码器。安装那些内置的编码解码器不支持新的编码解码器也是很容易的。(写这篇文档的时候,越南语/VISCII就是一个这样的例子。)

尽管US-ASCII和ISO-8859-1是非常普通的,这里也提供了可以和它们互相映射的特别快的函数。举例来说,打开一个应用程序的图标也许会这样做:

        QFile f( QString::fromLatin1("appicon.png") );

关于输出,Qt对于从Unicode到任何一个系统和字体提供的编码的转换作出了最大的努力。基于操作系统、本地和字体的可用性和Qt对所使用的字符的支持,这种转换也许是好的,也许是坏的。我们将在即将推出的版本中继续改进,以最普通的地区编码作为重点。


Copyright © 2002 Trolltech Trademarks 译者:Cavendish
Qt 3.0.5版
posted on 2005-10-24 14:21 snoics 阅读(416) 评论(0)  编辑  收藏 所属分类: 它山之石

只有注册用户登录后才能发表评论。


网站导航: