我曾经困惑过一段时间:
Confusion on Unicode and Multibyte Articles
在阅读了所有撰稿人的评论后,加上:
查看一篇旧文章(2001年):http://www.hastingsresearch.com/net/04-unicode-limitations.shtml,讨论unicode:
是一个16位字符定义 允许理论总数超过 65,000个字符。然而 完整的世界角色 加起来超过170,000个字符。
并查看当前的“现代”文章:http://en.wikipedia.org/wiki/Unicode
最常用的编码是 UTF-8(全部使用1个字节 ASCII字符,具有相同的字符 代码值与标准ASCII一样 编码,其他最多4个字节 字符),现在过时的UCS-2 (全部使用2个字节 字符,但不包括每一个 Unicode标准中的字符), 和UTF-16(扩展UCS-2,使用 4个字节来编码缺少的字符 来自UCS-2)。
似乎在VC2008的编译选项中,字符集下的“Unicode”选项实际上意味着“在UCS-2中编码的Unicode”(或者UTF-16?我不确定)< / p>
我尝试通过在VC2008下运行以下代码来验证这一点
#include <iostream>
int main()
{
// Use unicode encoded in UCS-2?
std::cout << sizeof(L"我爱你") << std::endl;
// Use unicode encoded in UCS-2?
std::cout << sizeof(L"abc") << std::endl;
getchar();
// Compiled using options Character Set : Use Unicode Character Set.
// print out 8, 8
// Compiled using options Character Set : Multi-byte Character Set.
// print out 8, 8
}
似乎在使用Unicode字符集选项进行编译时,结果符合我的假设。
但是多字节字符集怎么样?多字节字符集在当前“现代”世界中意味着什么? :)
答案 0 :(得分:6)
http://en.wikipedia.org/wiki/Multi-byte_character_set
MBCS是一个术语,用于表示一类字符编码,其中的字符不能用单个字节表示,因此是多字节字符集。为了正确解码这种格式的字符串,您需要一个代码页来告诉您各种字节组合映射到字符。 ISO/IEC 8859定义了一套MBCS标准,但根据维基百科,ISO在2004年停止维护它们,大概是专注于Unicode。
所以我猜MBCS的现代术语“不赞成使用Unicode”。
答案 1 :(得分:0)
多字节表示一个字符存储在多个字节中。
从维基百科上提取utf8:
UTF-8对每个字符进行编码(代码 点)1到4个八位字节(8位字节), 使用单个八位字节编码 仅适用于128个US-ASCII字符。
基本上,utf8是一个多字节字符集: - )。
答案 2 :(得分:0)
多字节字符集是任何编码方案的通用术语,可以使用多于1个字节来编码字符。
当您听到这个术语时,您通常会期望它引用旧版旧版字符集之一,如“IBM EBCDIC cp1390 - 日语汉字多字节”。
所有UNICODE计划在技术上都是MBCS,但您可能会将它们统称为“UNICODE”或特别指定为utf-8,utf-16或utf-32。
使用MBCS字符集的唯一“当前”软件是Microsoft Office套件。其中使用“Windows MBCS”。这与utf-16几乎完全相同,除了一些细微差别。由于微软早期采用草案标准,完整标准的一些小部分证明难以实现,因此它坚持使用术语“Windows MBCS”。
答案 3 :(得分:0)
在MSVC中,字符集下的“Unicode”选项意味着_T("X")
扩展为L"X"
。如果设置为MBCS,则_T("X")
会扩展为"X"
。
另一个结果是Win32宏MessageBox()
是否扩展为MessageBoxW()
或MessageBoxA
,以及用于A / W对的所有其他Win32函数的宏。
答案 4 :(得分:0)
似乎在VC2008的编译选项中,字符集下的“Unicode”选项实际上意味着“在UCS-2中编码的Unicode”(或者UTF-16?我不确定)
它使用Utf-16 LE中编码的Unicode。我链接到的维基百科文章有一个关于这种影响的说明。
但是多字节字符集怎么样?多字节字符集在当前“现代”世界中意味着什么? :)
MBCS主要是used in the MSDN documentation to mean DBCS。这是explained in more detail in this blog post。如果您想避免混淆,可以说“MBCS代码页”。