3

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

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

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

4

3 回答 3

11

我认为您应该阅读以下内容: http: //www.joelonsoftware.com/articles/Unicode.html

于 2012-12-18T13:22:19.327 回答
1

这取决于您使用的编码。

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

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

这意味着,您应该将它们存储在一些多字节类型中,例如wchar_t. 但这与您将数据存储在char.

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

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

于 2012-12-18T13:28:46.477 回答
-1
char x = 128;

unsigned char y = (unsigned char) x;

printf("%c %u\n", x, y);
于 2012-12-18T13:24:27.513 回答