“多字节字符集”的当前现代术语是什么

时间:2010-03-10 03:12:10

标签: c++ visual-c++ unicode internationalization

我曾经困惑过一段时间:

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字符集选项进行编译时,结果符合我的假设。

但是多字节字符集怎么样?多字节字符集在当前“现代”世界中意味着什么? :)

5 个答案:

答案 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代码页”。