Unicode:宽字节字符集

2016-02-19 18:00 7 1 收藏

今天图老师小编要跟大家分享Unicode:宽字节字符集,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】


  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将宽字符串转换成等价的多字节字符串。
  

来源:http://www.tulaoshi.com/n/20160219/1616565.html

延伸阅读
改变redhat的系统语言/字符集 改变redhat的系统语言/字符集修改 /etc/sysconfig/i18n 文件,如 LANG="en_US",xwindow会显示英文界面, LANG="zh_CN.GB18030",xwindow会显示中文界面。 还有一种方法 cp /etc/sysconfig/i18n $HOME/.i18n 修改 $HOME/.i18n 文件,如 LANG="en_US",xwindow会显示英文界面, LANG...
program GenBig5Code;{$APPTYPE CONSOLE}uses SysUtils;Var i, j: byte; mBig5File: textfile;begin AssignFile(mBig5File, 'c:Big5Code.bin'); Rewrite(mBig5File); //BIG5字符集范围: 高位$A1~$FE, 低位分为两段:$40~$7E, $A1~$FE for i := $A1 to $FE do beginfor j := $40 to $7E do Write(mBig5File, chr(i), chr(j...
标签: Java JAVA基础
关于JAVA学习者们,或多或少都会遇到这样的问题:编码基本知识,java,系统软件,url,工具软件等。 下面本文将针对以上几点问题进行描述讨论,我们就以“中文”两个字为例来说明,查找相关资料可知“中文”的GB2312编码是“d6d0 cec4”,为Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。(注意,“中文”这两个字没有iso8859-1编码...
在国内外大中型数据库管理系统中,把 ORACLE 作为数据库管理平台的用户比较多。 ORACLE 不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉字信息的显示方面着实给中国用户带来不少麻烦,笔者多年从事 ORACLE 数据库管理,经常收到周围用户和外地用户反映有关 ORACLE 数据库汉字显示问题的求援信,主要现象是把汉字显示为...
我在写一个查询条件时的问题如下: 如我想写一个字段中包含“李”字的所有记录 ?$str="李"; select * from table where field like ''%?$str%'' ; 显示的记录中除了包含”李”字的记录,还有不包含“李”字的记录。为什么? 在MySQL中,进行中文排序和查找的时候,对汉字的排序和查找结果是错误的。这种情况在MySQL的很...

经验教程

840

收藏

27
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部