![]() |
1
112
为了让这一切顺利进行
然而,这一点, was a bad idea . 应该始终显式指定字符类型。
MBCS代表“多字节字符集”。从字面上看,UTF-8似乎符合条件。 但在Windows中,“MBCS”仅指可以与windowsapi函数的“A”版本一起使用的字符编码。这包括代码页932(Shift_JIS)、936(GBK)、949(KS_C_5601-1987)和950(Big5),但是 不是 UTF-8标准。
无法支持 the most common character encoding 使Windows API的“A”版本毫无用处。因此,你应该
MSDN是错误的。Unicode是一种21位编码字符集,具有多种编码,最常见的是UTF-8、UTF-16和UTF-32(还有其他Unicode编码,如GB18030、UTF-7和UTF-EBCDIC。) 每当微软提到“Unicode”时,他们实际上是指UTF-16(或UCS-2)。这是历史原因。windowsnt是Unicode的早期采用者,当时16位被认为对每个人都足够了,UTF-8只在计划9中使用。所以UCS-2 是 |
![]() |
2
16
要解释这些字符串长度计数函数的区别,请考虑以下示例。
结果是
这是的十六进制表示法
_mbslen知道这个字符串是用GBK编码的,所以它可以正确地解释这个字符串并得到正确的结果
wcslen认为这个hexdeciaml数组是用UTF16LE编码的,它将两个字节计为一个字,因此它得到
正如@xiaokaoy所指出的,对于
|
![]() |
3
11
方法 Multi-Byte Character Set 和描述任何字符集,其中一个字符被编码成(可能)超过1字节。 这个 / ASCII码 字符集不是多字节的。 但是,它是一种多字节编码。它将任何Unicode字符编码为1、2、3或4个八位字节(字节)的序列。
不
|
![]() |
4
4
Generic-Text Mappings in TCHAR.H 使用方便表总结预处理器指令-UnCudio和Y-MbC如何改变不同C/C++类型的定义。 至于“Unicode”和“多字节字符集”,人们已经描述了它们的效果。我只想强调的是,这两个都是微软为一些非常具体的事情说话(也就是说,对于Windows来说,这些短语的含义没有人们想象的那么笼统,也比人们对文本国际化的理解更加具体。)这些确切的短语会显示出来,并倾向于在Microsoft技术文档中获得各自独立的节段/子节,例如 Text and Strings in Visual C++ |
![]() |
Bard.Mus · 迁移后的数据库字符集环境 4 月前 |
![]() |
David · 何时实际应用字符编码? 5 月前 |
![]() |
Karlomanio · 区分两个西里尔字母字符串 12 月前 |
![]() |
Gabriel Lucizano · 为什么我无法访问C中的文件 1 年前 |
![]() |
Mira Kumar · 在网页上显示特殊字符 1 年前 |
![]() |
jay.sf · 如何在pdf中使用UTF-8编码的字符矢量? 1 年前 |
![]() |
Kevin Patel · UTF-8内容在Java中是否可能格式错误 1 年前 |