所有应用程序都需要多语言支持,那么为什么 Microsoft Visual Studio 有两种类型的字符集
请澄清我,提前谢谢。
所有应用程序都需要多语言支持,那么为什么 Microsoft Visual Studio 有两种类型的字符集
请澄清我,提前谢谢。
首先,不仅仅是微软。C++03 需要两个字符集。(形式上,我认为它们可以是相同的,但我不知道它们所在的通用机器上的实现。)C++11 需要 4 ( std::string
, std::u16string
,
std::u32string
and std::wstring
); 遗憾的是,它不需要 iostream 的 u16 和 u32 版本(但这无疑会出现)。
不同的应用有不同的取舍。在我目前正在处理的应用程序中,我们将字符集限制为传统上称为 ASCII 的字符集,这样wchar_t
只会让事情变得更大(所以事情会变大,因为更少的局部性)。在我自己做(或做过)的文本应用程序中,我在内部使用了 UTF-8;它并不比 UTF-16 复杂,而且对于我所做的(国际字符只允许在少数特定上下文中使用),也需要更少的空间。如果我在进行全文处理(比如编辑器),我几乎肯定会使用 UTF-32。
碰巧的是,16 位的选择wchar_t
被证明是一个糟糕的选择,因为完整的 Unicode 至少需要 21 位。(当然,当微软做出选择时,这似乎是最好的主意,因为 Unicode 仍然是 16 位。)大多数其他系统(后来采用 Unicode)都有 32 位wchar_t
. (IBM 是个例外,它也很早就采用了 Unicode。)