gpt4 book ai didi

c++ - C++代码中的UTF用法

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:23 24 4
gpt4 key购买 nike

UTF 和 UCS 有什么区别。

在 C++ 字符串中表示非欧洲字符集(使用 UTF)的最佳方法是什么。我想知道您对以下方面的建议:

  • 代码中的内部表示
    • 用于运行时的字符串操作
    • 将字符串用于显示目的。
  • 最佳存储表示(在文件中)
  • 最好的有线传输格式(在不同架构和不同标准区域设置的应用程序之间传输)

最佳答案

What is the difference between UTF and UCS.

UCS 编码是固定宽度的,由每个字符使用多少字节来标记。例如,UCS-2 每个字符需要 2 个字节。代码点超出可用范围的字符无法在 UCS 编码中进行编码。

UTF 编码是可变宽度的,并以存储一个字符的最少位数为标志。例如,UTF-16 要求每个字符至少有 16 位(2 个字节)。具有大代码点的字符使用更大的字节数进行编码——UTF-16 中的星体字符为 4 个字节。

  • Internal representation inside the code
  • Best storage representation (i.e. In file)
  • Best on wire transport format (Transfer between application that may be on different architectures and have a different standard locale)

对于现代系统来说,最合理的存储和传输编码是UTF-8。在某些特殊情况下,其他格式可能适用——UTF-7 用于旧邮件服务器,UTF-16 用于编写糟糕的文本编辑器——但 UTF-8 是最常见的。

首选内部表示将取决于您的平台。在 Windows 中,它是 UTF-16。在 UNIX 中,它是 UCS-4。各有优点:

  • UTF-16 字符串永远不会比 UCS-4 字符串使用更多的内存。如果您存储许多包含主要在基本多语言平面 (BMP) 中的字符的大字符串,UTF-16 将需要比 UCS-4 少得多的空间。在 BMP 之外,它将使用相同的数量。
  • UCS-4 更容易推理。由于 UTF-16 字符可能会拆分为多个“代理项对”,因此正确拆分或呈现字符串可能具有挑战性。 UCS-4 文本没有这个问题。 UCS-4 的行为也很像“字符”数组中的 ASCII 文本,因此可以轻松移植现有的文本算法。

最后,一些系统使用 UTF-8 作为内部格式。如果您需要与现有的基于 ASCII 或 ISO-8859 的系统进行互操作,这很好,因为 NULL 字节不存在于 UTF-8 文本的中间——它们位于 UTF-16 或 UCS-4 中。

关于c++ - C++代码中的UTF用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/200093/

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