这个问题:
在C中讨论 char 与 unsigned char 与已签名字符方面做得很好。
但是,它并没有直接解决非ASCII文本应该使用的内容。因此,如果我有一个字节数组,表示某些任意字符集中的文本,如UTF-8或Big5(或有时是ASCII),我应该使用 char 或 unsigned char数组
我倾向于使用 char ,因为否则当数组为ASCII并且我使用 strlen 时,gcc会给出关于指针签名的警告。但我想知道什么是正确的。
答案 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这样的多字节编码,它肯定是不正确的。