2011-11-27 40 views
0

是什么unicode字符或多字节字符:哪种类型更有效?为什么?

wchar_t arry[] 

char arry[] 

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

哪种更有效?为什么?

+4

几乎没有任何假设是正确的(或甚至接近),所以几乎不可能回答这个问题。 (顺便说一下,苏联俄罗斯使用UTC + 4。) –

+4

[UTC-8](http://en.wikipedia.org/wiki/UTC%E2%88%9208:00)是北美太平洋时区。我认为你的意思是[UTF-8](http://en.wikipedia.org/wiki/UTF-8)。 –

回答

0

两者在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而损失的性能很小,但与系统调用相比,它相对较小。

+1

声明“'wchar_t' == UTF-16”具有误导性。一种是C数据类型,另一种是文本编码。 –

+0

@KerrekSB:好?另请注意,“多字节编码”和“Widechar”是Microsoft用作“一些面向字节的编码”和“UTF-16”的同义词的术语。虽然我同意这个术语是不正确的。 – ybungalobill

+1

一个正确的语句是Windows将'UTF-16编码的文本存储在'wchar_t'字符串中,它被称为“宽字符串”。 –

-1

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

+3

“多字节”根本不是编码。它是编码的**属性**:编码是多字节或固定宽度。 –

+0

实际上,这个答案的几乎每个方面都是不正确的。 –

相关问题