【问题标题】:unicode char or multibyte char:which type is more efficient? why? [closed]unicode char 或 multibyte char:哪种类型更有效?为什么? [关闭]
【发布时间】:2011-11-27 18:23:06
【问题描述】:

有什么区别

wchar_t arry[] 

char arry[] 

类型初始化。
对于Unicode,我知道字符我知道它有几种编码格式。其中windows 使用UTF-16。这意味着大多数字符都是 16 位的。但在char 类型中,一个字符是 8 位。这是否意味着我们可以在wchar 类型中存储2byte?

哪种类型更有效?为什么?

【问题讨论】:

  • 几乎没有一个假设是正确的(甚至接近),所以几乎不可能回答这个问题。 (顺便说一句,苏联使用 UTC+4。)
  • UTC-8 是北美的太平洋时区。我想你的意思是UTF-8

标签: c++ unicode multibyte


【解决方案1】:

两者在 Windows 上都是可变长度的(其中 wchar_t 表示 UTF-16),而后者对于大多数测试来说都是浪费的。即使在 CJK 中,通过网络传输的文本也有一半是 ASCII。

The most portable and easiest way to support Unicode is to use UTF-8 (char)。这意味着在转换为 UTF-16 以将字符串传递给 Windows API 时性能损失很小,但与系统调用相比,它相对较小。

【讨论】:

  • 声明“wchar_t == UTF-16”具有误导性。一种是C数据类型,另一种是文本编码。
  • @KerrekSB:更好?另请注意,“多字节编码”和“Widechar”是 Microsoft 用作“面向字节的编码”和“UTF-16”的同义词的术语。虽然我同意术语不正确。
  • 正确的说法是,Windows 将 UTF-16 编码的文本存储在称为“宽字符串”的 wchar_t 字符串中。
【解决方案2】:

多字节是一种可变宽度编码。使用英语工作时您将使用 1 个字节,但对于非常不常见的字符集通常使用 2 个或更多(最多 6 个字节)。因此,就内存使用而言,多字节通常更好。 但是,当您需要知道字符串中有多少个字符时,在 unicode 中,您只需将字符串长度除以 2 (sizeof (wchar_t))。在多字节中,您必须遍历整个字符串并计算字母的数量。 见multibyte

【讨论】:

  • "Multibyte" 根本不是一种编码。它是编码的属性:编码是多字节或固定宽度。
  • 实际上,这个答案的几乎每个方面都是不正确的。
猜你喜欢
  • 1970-01-01
  • 2011-01-02
  • 2015-08-13
  • 2016-04-13
  • 1970-01-01
  • 2012-09-27
  • 2013-04-02
  • 2021-11-09
  • 1970-01-01
相关资源
最近更新 更多