C:char与非ASCII文本数据的unsigned char

时间:2014-10-24 03:36:07

标签: c string unsigned-char

这个问题:

What is an unsigned char?

在C中讨论 char unsigned char 已签名字符方面做得很好。

但是,它并没有直接解决非ASCII文本应该使用的内容。因此,如果我有一个字节数组,表示某些任意字符集中的文本,如UTF-8或Big5(或有时是ASCII),我应该使用 char unsigned char数组

我倾向于使用 char ,因为否则当数组为ASCII并且我使用 strlen 时,gcc会给出关于指针签名的警告。但我想知道什么是正确的。

2 个答案:

答案 0 :(得分:2)

使用普通字符表示字符。如果需要包含-127 to +127值的有符号整数类型,请使用signed char。使用unsigned char表示无符号整数类型,其值范围为0 to 255

答案 1 :(得分:2)

你问的问题可能比你期望的要广泛得多。

要直接回答,大多数实现使用" byte"作为底层缓冲区。在这方面,标准uint8_t typedef是你最好的选择。这主要是因为大多数字符集使用可变数量的字节来存储字符,因此单独的字节处理在编码和解码过程中是必不可少的。它还简化了不同的" endianess"。

之间的转换

一般情况下,对于除ASCII编码或其他单字节代码页(0-255范围)以外的任何内容使用strlen是不正确的。对于像Big5,UTF-8/16或Shift-JIS这样的多字节编码,它肯定是不正确的。