【发布时间】:2014-12-19 21:17:55
【问题描述】:
这个问题:
在讨论 C 中的 char 与 unsigned char 与 signed char 方面做得很好。
但是,它并没有直接说明应该用于非 ASCII 文本的内容。因此,如果我有一个字节数组表示任意字符集中的文本,如 UTF-8 或 Big5(有时是 ASCII),我应该使用 char 还是 unsigned char em>?
我倾向于使用 char,因为否则当数组是 ASCII 并且我使用 strlen 时,gcc 会给我关于指针符号的警告。但我想知道什么是正确的。
【问题讨论】:
-
是的,在这方面接受的答案是正确的。 C 字符串类型是由 NUL 字节终止的非 NUL 字节序列,未指定编码,但如果您有任何选择,请使用 UTF-8。
-
除了 UTF-8,你不想使用 strlen,因为可能有内部 NUL。无论如何,这是一个很大的话题。对于 Unicode,我建议 site.icu-project.org
-
@Deduplicator 请仔细阅读:除了 UTF-8,...可以有内部NUL。我的意思是 OP 所指的:Big5 等。当然 UTF-16 和 UTF-32 也可以包含内部 NUL,所以是的,我写的内容适用于它们 to。
-
@JimBalter:你知道带有内部
NULs 的 8 位编码不是终结符吗? -
unsigned char优于char(当char被签名时)的优势在于is...()函数是signed char的 UB,因为他们期望unsigned char或 EOF。
标签: c string unsigned-char