UTF vs字符类型

问题描述 投票:-1回答:2

UTF-8和UTF-16是可变长度的-可以使用2个以上的字节。 UTF-32使用4个字节。 Unicode和UTF是通用概念,但我想知道它与C / C ++字符类型如何相关。 Windows(WinApi)使用2个字节wchar_t。如何处理超过两个字节的UTF-8字符?即使在wchar_t为4个字节长的Linux上,我也可能会得到需要6个字节的UTF-8字符。请检查其工作原理。

c++ c unicode utf
2个回答
4
投票

请注意不要混淆Unicode代码点及其在特定编码中的表示。 全部 Unicode代码点在0x0-0x10FFFF范围内,这使它们可以直接存储为32位数字(这是UTF-32的工作)。

UTF-8 每个代码点可以达到6个字节 [编辑:它的最终版本实际上是4个,因此空间问题尚无定论,但是该段的其余部分仍然成立],因为它需要一些开销来管理其变量长度-这就是允许许多其他代码点仅以1或2个字节进行编码的原因。但是,当您收到a-6个字节 UTF-8字符并将其存储到Linux的32位wchar_t中时,就不会按原样存储它:您转换它] >转换为UTF-32,从而减少了开销。与Windows的16位wchar_t相同,只是您可能会得到2个16位,以UTF-16编码的一半。

注意:许多Windows软件实际上正在使用UCS-2,本质上是UTF-16,没有可变长度。这些将无法处理需要两个UTF-16 wchar_t的字符。


2
投票

首先,最大Unicode

© www.soinside.com 2019 - 2024. All rights reserved.