【问题标题】:Getting the number of bytes in a Unicode string获取 Unicode 字符串中的字节数
【发布时间】:2021-07-31 07:28:38
【问题描述】:

我有一个 Unicode 字符串,我需要知道它使用的字节数。

总的来说,我知道wcslen(s) * 2 会起作用。但我的理解是,这在使用 Unicode 时并不可靠。

是否有可靠且高效的方法来获取 Unicode 字符串使用的字节数?

【问题讨论】:

标签: c++ winapi unicode


【解决方案1】:

wcslen 计算wchar_t 实体的数量,直到找到 NUL 字符。它不会以任何方式解释数据。

(wcslen(s) + 1) * sizeof(wchar_t)将总是可靠地计算存储字符串s所需的字节数。

【讨论】:

  • 值得注意的是,2 适用于 Windows,其中 wchar_t 是 UTF-16,但不适用于其他 UTF-32 平台(因此是 4 个字节)。
  • @que 虽然我很喜欢准确性,但这只是增加了噪音。该问题已正确标记为winapi。 ABI 要求 wchar_t 为 2 个字节。
  • @IInspectable 伙计们,答案似乎报告了 UCS-4 字符串的错误长度。见onlinegdb.com/HyslATB_d。请评论。问候。它表明“foo”的长度为 8 个符号。
  • onlinegdb 上使用的从 UTF-16 转换为 UCS-4 的算法在这里:stackoverflow.com/questions/8540090/…
  • @bim 这个问题是混淆字符编码和存储的结果。 C 对 Unicode 不了解任何事情,只处理存储方面的问题。在 Windows 上,wchar_t 是 2 个字节,wcslen 报告 代码单元 的数量,直到任何给定字符串的第一个零终止符。它明确不涉及任何编码方面,并且不报告问题似乎暗示的代码点的数量。如果您在谈论 UTF-16,您指的是本问答不适用于的东西。
猜你喜欢
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2012-04-08
  • 2018-08-15
  • 2012-04-21
  • 2012-11-30
  • 1970-01-01
相关资源
最近更新 更多