C字符超过128

时间:2012-12-18 13:18:22

标签: c character-encoding character

我有一个关于在C char数组中保存字符的问题。

我必须将文件中的文本读入“char”类型的数组中(我不能使用unsigned char)。当某些字符的值超过127时(例如€,ä,ö,...),它会将它们保存为负值,但它们通常会占用更多空间(例如€取3个负值)。

如何将这些负值计算回无符号字符。有人可以将我链接到有关该问题的教程或指南吗?

3 个答案:

答案 0 :(得分:11)

我认为你应该读到这个:http://www.joelonsoftware.com/articles/Unicode.html

答案 1 :(得分:1)

这取决于您使用的编码。

传统的1字节编码不会造成任何问题。是的,有些字符被视为负值,但它们仍然是阅读时的字符。如果按原样回写它们,它们就会是它们。

由于您确定每个欧元符号有3 char s,因此您正在处理一些Unicode编码,例如UTF-8。

这意味着,您应该将它们存储在某些多字节类型中,例如wchar_t。但这与您在char中存储数据的要求相矛盾。

我建议您先将文件转换为1字节编码,例如转换为Win1252。此编码对于欧元符号有1个字节。

如果您希望使用Unicode,我恐怕很难处理否定char。传统的方法是用正整数表示Unicode值。

答案 2 :(得分:-1)

char x = 128;

unsigned char y = (unsigned char) x;

printf("%c %u\n", x, y);