unicode简介

Unicode.

多字节字符集,Unicode与各种编码之间怎么转换。Unicode与UTF8之间有一一对应的关系,它们之间可以直接相互转换,多字节字符集和UTF8之间的转换得经过Unicode中转。
        MBCS--Unicode--UTF8
        UTF8--Unicode--MBCS
        在 Windows平台上,进行转换的函数是WideCharToMultiByte和MultiByteToWideChar。这样如果要将MBCS转换成 UTF8,先调用MultiByteToWideChar,使用CP_ACP代码页(默认的代码页),然后调用WideCharToMultiByte,这次用CP_UTF8作代码页。
      CFile   file;
      WCHAR   szwBuffer[128];  
      WCHAR   *pszUnicode   =   L"Unicode   string ";   //   unicode   string
      CHAR   *pszAnsi   =   "Ansi   string ";   //   ansi   string
      WORD   wSignature   =   0xFEFF;
      
      file.Open(TEXT("Test.txt"),   CFile::modeCreate|CFile::modeWrite);
      file.Write(&wSignature,   2);
      file.Write(pszUnicode,   lstrlenW(pszUnicode) * sizeof(WCHAR));   //   explicitly   use   lstrlenW   function

      MultiByteToWideChar(CP_ACP,   0,   pszAnsi,   -1,   szwBuffer,   128);

      file.Write(szwBuffer,   lstrlenW(szwBuffer)   *   sizeof(WCHAR));
      file.Close();

      对于Unicode文本的格式.只要在文本开头写进FF   FE   标志字节就表示该文本为Unicode文本..然后把你剩下的文本转换成Unicode代码写入. 转换Unicode:如果你在非NT2000下开发.可以通過MultiByteToWideChar;WideCharToMultiByte轉換.如果在2000下.可以通过创建Unicode工程..或者上面两函数都可以.....
     可以看看下面别人的总结.
     Unicode   :宽字节字符集
  1.   如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?
  可以调用Microsoft   Visual   C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。
  调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。
  2.   如何对DBCS(双字节字符集)字符串进行操作?
  函数   描述
  PTSTR   CharNext   (   LPCTSTR   );   返回字符串中下一个字符的地址
  PTSTR   CharPrev   (   LPCTSTR,   LPCTSTR   );   返回字符串中上一个字符的地址
  BOOL   IsDBCSLeadByte(   BYTE   );   如果该字节是DBCS字符的第一个字节,则返回非0值
  3.   为什么要使用Unicode?
  (1)   可以很容易地在不同语言之间进行数据交换。
  (2)   使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。
  (3)   提高应用程序的运行效率。
  Windows   2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那么系统首先要将字符串转换成 Unicode,然后

将Unicode字符串传递给操作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符串,然后将结果返回给你的应用程序。进行这

些字符串的转换需要占用系统的时间和内存。通过从头开始用Unicode来开发应用程序,就能够使你的应用程序更加有效地运行。
  Windows   CE   本身就是使用Unicode的一种操作系统,完全不支持ANSI   Windows函数
  Windows   98   只支持ANSI,只能为ANSI开发应用程序。
  Microsoft公司将COM从16位Windows转换成Win32时,公司决定需要字符串的所有COM接口方法都只能接受Unicode字符串。
  4.   如何编写Unicode源代码?
  Microsoft公司为Unicode设计了WindowsAPI,这样,可以尽量减少代码的影响。实际上,可以编写单个源代码文件,以便使用或者不使用Unicode来对它进行

编译。只需要定义两个宏(UNICODE和_UNICODE),就可以修改然后重新编译该源文件。
  _UNICODE宏用于C运行期头文件,而UNICODE宏则用于Windows头文件。当编译源代码模块时,通常必须同时定义这两个宏。
  5.   Windows定义的Unicode数据类型有哪些?
  数据类型   说明
  WCHAR   Unicode字符
  PWSTR   指向Unicode字符串的指针
  PCWSTR   指向一个恒定的Unicode字符串的指针
  对应的ANSI数据类型为CHAR,LPSTR和LPCSTR。
  ANSI/Unicode通用数据类型为TCHAR,PTSTR,LPCTSTR。
  6.   如何对Unicode进行操作?
  字符集   特性   实例
  ANSI   操作函数以str开头   strcpy
  Unicode   操作函数以wcs开头   wcscpy
  MBCS   操作函数以_mbs开头   _mbscpy
  ANSI/Unicode   操作函数以_tcs开头   _tcscpy(C运行期库)
  ANSI/Unicode   操作函数以lstr开头   lstrcpy(Windows函数)
  所有新的和未过时的函数在Windows2000中都同时拥有ANSI和Unicode两个版本。ANSI版本函数结尾以A表示;Unicode版本函数结尾以W表示。Windows会如下定

义:
  #ifdef     UNICODE
  #define     CreateWindowEx     CreateWindowExW
  #else
  #define     CreateWindowEx     CreateWindowExA
  #endif     //   !UNICODE
  7.   如何表示Unicode字符串常量?
  字符集   实例
  ANSI   “string”
  Unicode   L“string”
  ANSI/Unicode   T(“string”)或_TEXT(“string”)if(   szError[0]   ==   _TEXT(‘J’)   ){   }
  8.   为什么应当尽量使用操作系统函数?
  这将有助于稍稍提高应用程序的运行性能,因为操作系统字符串函数常常被大型应用程序比如操作系统的外壳进程Explorer.exe所使用。由于这些函数使用得

很多,因此,在应用程序运行时,它们可能已经被装入RAM。
  如:StrCat,StrChr,StrCmp和StrCpy等。
  9.   如何编写符合ANSI和Unicode的应用程序?
  (1)   将文本串视为字符数组,而不是chars数组或字节数组。
  (2)   将通用数据类型(如TCHAR和PTSTR)用于文本字符和字符串。
  (3)   将显式数据类型(如BYTE和PBYTE)用于字节、字节指针和数据缓存。
  (4)   将TEXT宏用于原义字符和字符串。
  (5)   执行全局性替换(例如用PTSTR替换PSTR)。
  (6)   修改字符串运算问题。例如函数通常希望在字符中传递一个缓存的大小,而不是字节。这意味着不应该传递sizeof(szBuffer),而应该传递(sizeof

(szBuffer)/sizeof(TCHAR)。另外,如果需要为字符串分配一个内存块,并且拥有该字符串中的字符数目,那么请记住要按字节来分配内存。这就是说,应该调

用malloc(nCharacters   *sizeof(TCHAR)),而不是调用malloc(nCharacters)。
  10.   如何对字符串进行有选择的比较?
  通过调用CompareString来实现。
  标志   含义
  NORM_IGNORECASE   忽略字母的大小写
  NORM_IGNOREKANATYPE   不区分平假名与片假名字符
  NORM_IGNORENONSPACE   忽略无间隔字符
  NORM_IGNORESYMBOLS   忽略符号
  NORM_IGNOREWIDTH   不区分单字节字符与作为双字节字符的同一个字符
  SORT_STRINGSORT   将标点符号作为普通符号来处理
  11.   如何判断一个文本文件是ANSI还是Unicode?
  判断如果文本文件的开头两个字节是0xFF和0xFE,那么就是Unicode,否则是ANSI。
  12.   如何判断一段字符串是ANSI还是Unicode?
  用IsTextUnicode进行判断。IsTextUnicode使用一系列统计方法和定性方法,以便猜测缓存的内容。由于这不是一种确切的科学方法,因此   IsTextUnicode

有可能返回不正确的结果。
  13.   如何在Unicode与ANSI之间转换字符串?
  Windows函数MultiByteToWideChar用于将多字节字符串转换成宽字符串;函数WideCharToMultiByte将宽字符串转换成等价的多字节字符串。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值