gpt4 book ai didi

c++ - Unicode - 通常在 C++ 中使用它

转载 作者:IT老高 更新时间:2023-10-28 22:20:49 26 4
gpt4 key购买 nike

假设我们有一个任意字符串,s

s 具有来自世界任何地方的属性。来自美国、日本、韩国、俄罗斯、中国和希腊的人们都会时不时地写到s。不过,幸运的是,我们没有使用线性 A 的时间旅行者。

为了讨论,假设我们要进行字符串操作,例如:

  • 反向
  • 长度
  • 大写
  • 小写
  • 索引

,只是因为这是为了讨论,假设我们想自己编写这些例程(而不是抓取一个库),我们没有要维护的遗留软件。

Unicode 有 3 个标准:utf-8、utf-16 和 utf-32,各有优缺点。但是假设我有点笨,我想要一个 Unicode 来统治所有这些(因为为 3 种不同类型的字符串编码滚动一个动态适应库来隐藏 API 用户的差异听起来很难)。

  • 哪种编码最通用?
  • wchar_t 支持哪种编码?
  • STL 支持哪种编码?
  • 这些编码是否全部(或根本不)以空值结尾?

--

这个问题的重点是教育我自己和其他人了解有关 Unicode 的有用和可用信息:阅读 RFC 很好,但是有一堆与编译器、语言和操作系统相关的信息,而 RFC 没有封面,但对于在实际应用中实际使用 Unicode 至关重要。

最佳答案

  1. 哪种编码最通用
    可能是 UTF-32,尽管这三种格式都可以存储任何字符。 UTF-32 具有每个字符都可以在单个代码点中编码的特性。

  2. wchar_t 支持哪种编码
    没有任何。那是定义的实现。在大多数 Windows 平台上是 UTF-16,在大多数 Unix 平台上是 UTF-32。

  3. STL 支持哪种编码
    没有真的。 STL 可以存储您想要的任何类型的字符。只需使用 std::basic_string<t>具有足够大的类型以容纳您的代码点的模板。大多数操作(例如 std::reverse )不知道任何类型的 unicode 编码。

  4. 这些编码是否全部(或根本不)以空值结尾?
    不,Null 在任何这些编码中都是合法值。从技术上讲,NULL 也是纯 ASCII 中的合法字符。 NULL 终止是 C 的东西——不是编码的东西。

选择如何执行此操作与您的平台有很大关系。如果您在 Windows 上,请使用 UTF-16 和 wchar_t 字符串,因为这是 Windows API 用来支持 unicode 的内容。我不完全确定 UNIX 平台的最佳选择是什么,但我知道它们中的大多数都使用 UTF-8。

关于c++ - Unicode - 通常在 C++ 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2327953/

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