gpt4 book ai didi

c++ - UTF 与字符类型

转载 作者:行者123 更新时间:2023-11-30 18:21:03 26 4
gpt4 key购买 nike

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 字符。请解释一下它是如何工作的。

最佳答案

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

UTF-8 每个代码点可以达到 6 个字节 [编辑:最终版本中实际上是 4 个字节,因此空间问题没有实际意义,但该段落的其余部分成立]因为它需要一些开销管理其可变长度 - 这就是允许许多其他代码点仅用 1 或 2 个字节进行编码的原因。但是,当您接收 一个 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 的字符。

关于c++ - UTF 与字符类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58763834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com