Unicode宽字节字符集
当前位置:以往代写 > C/C++ 教程 >Unicode宽字节字符集
2019-06-13

Unicode宽字节字符集

Unicode宽字节字符集

副标题#e#

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。


#p#副标题#e#

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?

#p#分页标题#e#

用IsTextUnicode举办判定。IsTextUnicode利用一系列统计要领和定性要领,以便揣摩缓存的内容。由于这不是一种确切的科学要领,因此 IsTextUnicode有大概返回不正确的功效。

13. 如安在Unicode与ANSI之间转换字符串?

Windows函数MultiByteToWideChar用于将多字节字符串转换成宽字符串;函数WideCharToMultiByte将宽字符串转换成等价的多字节字符串。

    关键字:

在线提交作业