我有一个网络游戏程序,有一些在外国的中国人在上面玩。他们装的都是win2000 或 xp英文版的,看不到我程序中的汉字。用unicode就能看到了吗? 我应该怎么做?我的E文不灵,看不懂msdn.另外,如果我希望我的程序在英文2000下,显示的是英文字符,是不是用unicode就可以解决?

解决方案 »

  1.   

    ANSI
    ANSI 是个人计算机使用得最普遍的字符集。由于 ANSI 标准使用单一字节表示每个字符,因此最多只能有 256 个字符和标点符号代码。虽然对英语来说已经足够了,但不能完全支持其它语言。DBCS
    发行在亚洲大部分地区的 Microsoft Windows 系统使用 DBCS。它支持很多不同的东亚语言字母,如汉语、日语和朝鲜语。DBCS 使用数字 0–128 表示 ASCII 字符集。其它大于 128 的数字作为前导字节字符,它并不是真正的字符,只是简单的表明下一个字符属于非拉丁字符集。在 DBCS 中,ASCII 字符的长度是一个字节,而日语、朝鲜语和其它东亚字符的长度是 2 个字节。Unicode
    Unicode 是用两个字节表示每个字符的字符编码方案。国际标准组织 (ISO) 几乎为每种语言的每个字符和符号在 0 到 65,535 (216 – 1) 范围内定义了一个数字(再加上为将来发展保留的一些空余空间)。在所有 32 位版本的 Windows 中,部件对象模型 (COM) 都使用 Unicode,它是 OLE 和 ActiveX 技术的基础。Windows NT 全部支持 Unicode。虽然 Unicode 和 DBCS 都是双字节字符,但它们的编码方案完全不同。
      

  2.   

    Unicode 是用两个字节表示每个字符的字符编码方案。
    ANSI 是个人计算机使用得最普遍的字符集。
    上面的较全了。
      

  3.   

    关于Unicode
    Unicode是一个16位的字符集,它可以移植到所有主要的计算机平台并且覆盖几乎整个世界。它也是单一地区的;它不包括代码页或者其它让软件很难读写和测试的复杂的东西。现在还没有一个合理的多平台的字符集可以和它竞争。由于以上原因,Trolltech公司从Qt 2.0开始选择Unicode作为它天然的字符集。 
    在互联网上关于Unicode的信息。 
    Unicode协会提供了大量的文档,包括 Unicode的技术介绍 
    标准的主页 
    标准 
    标准当前的版本是3.0.1。 Unicode标准,3.0版。也可以看它的主页。 
    Unicode标准,2.0版。 也可以看在www.unicode.org的 2.1版的改进和2.1.9版和2.1.9的数据文件。 
    Qt中的Unicode 
    在Qt中,和大多数使用Qt的应用程序中,几乎所有的或全部的用户可见的字符串都被使用Unicode方式存储。Qt提供了: 对于文件输入输出,和传统的编码格式的互译——请看QTextCodec和QTextStream。 
    从输入法和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对所使用的字符的支持,这种转换也许是好的,也许是坏的。我们将在即将推出的版本中继续改进,以最普通的地区编码作为重点。 下面是地址:http://www.qiliang.net/qt/unicode.html
      

  4.   


      那是因为现在的中日韩内码都是使用2个bytes来表示一个字符,由于各有各的编码方式,所以就会出现冲突,例如:0xBBAF在Big5码下表示"赵"字,但在GB码下却表示"化"字,所以一旦没选好编码,就会出现一堆看不懂的天书.  Unicode它是以2bytes为一单位,为全世界各种文字给定一个唯一的编码,这样就可以避免各种编码方案间产生冲突,从而杜绝乱码的产生,也就是说用一种编码就可以容纳世界各种文字,这不但有利于讯息的交流,也有利于编写支持多语言的程序.  Unicode是以2Bytes即16bits来表示一个字符,即共可表达65535个不同的字符,现在最新版本是3.2.0 (2002年3月发布),4.0将于2003年9月公布。  以中文为例,现在Unicode中的跟中日韩表意字符(CJK Ideograph)有关的编码范围是:
        0x4e00 至 0x9fa5 共20902个字
        0xf900 至 0xfa2d 共302个字 (扩展区)Codepage(页码)  由于我们传统使用的内码像Big5,GB2312与unicode并不是一一对应,故两者之间的转换要靠codepage(页码)来实现,Big5页码的编号为960,GB码的页码编号为936。 
    Unicode文件结构  每个Unicode文件档首都有2bytes的标识符,用以表明文件的类型。其后的都是数据区,以每2bytes为一单位。  Unicode文件的储存形式有两种,一种是"标准"的Unicode格式,另一种是Unicode big endian(不知道中文该怎样翻译^_^),两者的区别在于高低位字节的顺序不一样。
     Unicode Unicode BE 
    档首标识符 FF FE FE FF 
    例:赵(0x8d99) 99 8D 8D 99 
    Windows NT/2000/XP的Notepad(记事本)支持多种unicode编码
     
      

  5.   

    简单地说,UNICODE就是Windows NT/2000以上版本为了达到多语言共用效果而定义的一个大的双字节字符集,Windows NT/2000以上版本是它的缺陷,多语言共用是它的优势
    关于对UNICODE字符的操作见置顶帖
      

  6.   

    yangang000(风):
     
      你的这个问题不能通过这种方法解决。
    必须为不同的语言平台提供不同的资源!要想在英文版系统显示中文,必须安装多语言支持!----------------------------------
    多语言支持是怎么回事?  
     
      

  7.   

    在unicode之前,对于每一种语言都存在独立的字符编码系统,每个系统都使用相同的数字(0-255)来表示这种语言的字符。一些语言(象俄语)对于如何表示相同的字符还有几种有冲突的标准;另一些语言(象日语)拥有太多的字符,需要多个字符集。在系统之间进行文档交流是困难的,因为对于一台计算机来说,没有方法可以识别出文档的作者使用了哪种编码模式;计算机看到的只是数字,并且这些数字可以表示不同的东西。接着考虑到试图将这些文档存放到同一个地方(比如在同一个数据库表中);你需要在每段文本的旁边保存字符的编码,并且确保在传递文本的同时将编码也进行传递。接着考虑多语言文档,即在同一文档中使用了不同语言的字符。(比较有代表性的是使用转义符来进行模式切换;扑,我们处于俄语 koi8-r 模式,所以字符 241 表示这个;扑,现在我们处于 Mac 希腊语模式,所以字符 241 表示其它什么。等等。)这些就是unicode被设计出来要解决的问题。为了解决这些问题,unicode用一个 2 字节数字表示每个字符,从 0 到 65535。[11]每个 2 字节数字表示至少在一种世界语言中使用的一个唯一字符。(在多种语言中都使用的字符具有相同的数字码。)这样就确保每个字符一个数字,并且每个数字一个字符。Unicode数据永远不会表示不明确。当然,仍然还存在着所有那些遗留的编码系统的情况。例如,7位ASCII码,它可以将英文字符存诸为从0到127的数值。(65是大写字母“A”,97是小写字母“a”,等等。)英语有着非常简单的字母表,所以它可以完全用7位ASCII码来表示。象法语、西班牙语和德语之类的西欧语言都使用叫做ISO-8859-1的编码系统(也叫做“latin-1”),它使用7位ASCII字符表示从0到127的数字,但接着扩展到了128-255的范围来表示象n上带有一个波浪线(241),和u上带有两个点(252)的字符。Unicode使用同7位ASCII码一样的字符表示0到127,同ISO-8859-1一样的字符表示128到255,接着使用剩余的数字,256到65535,扩展到表示其它语言的字符。在处理unicode数据时,在某些地方你可能需要将数据转换回这些遗留编码系统之一。例如,为了同其它一些计算机系统集成,这些系统期望它的数据使用一种特定的单字节编码模式,或将数据打印输出到一个非unicode识别终端或打印机。