我以前是混淆相当长的一段:什么是当前现代术语“多字节字符集”
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 sta中的每个 字符ndard), 和UTF-16(其扩展了UCS-2,使用 4个字节来编码来自UCS-2的缺少 的字符)。
似乎在VC2008的编译选项,选项 “统一” 下的字符集的真正含义 “的Unicode编码在UCS-2”(或UTF-16?我不知道)
我尝试下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字符集选项编译过程中,其结果符合我的假设。
但是多字节字符集呢?多字节字符集在当今“现代”世界中意味着什么? :)
MBCS意味着什么。今天我们有Unicode。你所知道的所有信息都已消失(大部分)。 – 2010-03-10 03:15:03
使用L宏会导致编译器将这两个字符串视为“宽字符串”,因此对您获得的结果(8,8)有意义。删除L会得到(7,4)的结果,按照Microsoft标准/耸耸肩 – YeenFei 2010-03-10 03:58:03
@Pototoswatter:你在说什么?字符串文字具有数组类型,在本例中为'wchar_t const [4]'。当你解除引用时,数组首先衰减到'wchar_t const *'。取消引用反过来给你一个'wchar_t const'。因此,'* L“123456789”== L'1''和'sizeof(* L“123456789”)== sizeof(L'1')' – MSalters 2010-03-10 08:45:58