【问题标题】:Should I use wchar_t when using UTF-8?使用 UTF-8 时应该使用 wchar_t 吗?
【发布时间】:2013-07-26 03:56:36
【问题描述】:

UTF-8 可以编码为 1、2 和最多 4 个字节。我系统上的单个 char 是 1 个字节。我是否应该使用wchar_t 作为预防措施,以便能够适应任意 UTF-8 编码的字符?

【问题讨论】:

  • 没有必要。参考这个:stackoverflow.com/questions/2259544/…>
  • wchar_t 是(通常?)2 个字节,而不是 4 个。
  • 没有。请参阅utf8everywhere.org 了解您应该做什么:)

标签: c++ unicode utf-8


【解决方案1】:

不,你不应该! Unicode 4.0 标准 (ISO 10646:2003) 指出:

wchar_t 的宽度是特定于编译器的,可以小至 8 位。因此,需要在任何 C 或 C++ 编译器之间移植的程序不应使用 wchar_t 来存储 Unicode 文本。

在大多数情况下,UTF-8 文本的“字符性质”与您的程序无关,因此将其视为 char 元素的数组,就像任何其他字符串一样,就足够了。但是,如果您需要提取单个字符,这些字符应存储在至少 24 位宽的类型中(例如,uint32_t),以便容纳所有 Unicode 代码点。

【讨论】:

    【解决方案2】:

    如果你想让你的代码可移植,wchar_t 没有多大用处。

    开启wikipedia

    wchar_t 的宽度是编译器特定的,可以小到 8 位。因此,需要跨任何 C 或 C++ 编译器不应该使用 wchar_t 来存储 Unicode 文本。这 wchar_t 类型用于存储编译器定义的宽字符, 在某些编译器中可能是 Unicode 字符”

    进一步,

    C 和 C++ 在各自标准的 2011 年修订版中都引入了固定大小的字符类型 char16_tchar32_t,以提供 16 位和 32 位 Unicode 转换格式的明确表示,留下 wchar_t 实现-已定义。

    【讨论】:

      猜你喜欢
      • 2014-03-08
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多