1:windows vista,每个Unicode都使用UTF-16编码,谈到unicode,除非特别声明,否则都是UTF-16编码。
2:wchat_t对应char,表示一个16为unicode字符。声明unicode字符和字符串方式:
- wchar_t c = L'A'
- wchar_t str[100] = L"Astring"
3:宏TEXT自动切换ANSI或者UNICODE字符/字符串。
4:windows NT起,所有核心函数都用Unicode,及时我们调用的是ANSI版本函数时,此函数也只是一个转换层,转为字符为unicode,再调用unicode版本函数。返回类似。已知转换函数存在bug,应用程序应该用unicode开发。
5:定义UNICODE,_UNICODE要么同时指定,要么都不指定。
6:C运行库中的ANSI函数不会转换为UNICODE版本。
7:安全函数,以_s为后缀eg:_tcscpy_s,_tcscat_s,使用_countof计算缓冲区大小。缓冲区太小会返回失败,不会自动截断。ERANGE
8:更多控制字符串函数:
StringCchCat(Ex),StringCchCopy(Ex),StringCchPrintf(Ex).. .缓冲区太小会执行截断。STRSAFE_E_INSUFFICIENT_BUGGER,被SUCCEEDED/FAILED定义成失败。
9:比较函数:CompareString(Ex),LCID GetThreadLocale(),
cch参数传入负值,会假设pString以0结尾。
CompareStringOrdinal,比较程序内部所用字符串(路径名、注册表、XML元素/属性等),速度快。只支持Unicode。两个函数返回0表示调用失败,返回CSTR_LESS_THAN(1)表示pString1小于pString2,返回CSTR_EQUAL(2)表示相等,返回CSTR_GREATER_THAN(3)表示pString1大于pString2。返回值-2
10:使用MultiByteToWideChar和WideCharToMultiByte进行Ansi与Unicode转换。
11:判断unicode还是Ansi字符,使用IsTextUnicode