我正在用C语言编写一个小应用程序,它读取一个简单的文本文件,然后逐行输出。问题是文本文件中包含一些特殊字符,如?、?和?等。当我在终端中运行程序时,这些字符的输出用"?“表示。
有没有简单的解决办法?
发布于 2009-09-03 13:40:48
确保没有意外地丢弃任何字节;一些UTF-8字符的长度超过一个字节(这就是问题的关键所在),您需要将它们全部保留下来。
将缓冲区的内容打印为十六进制非常有用,这样您就可以检查实际读取了哪些字节:
static void print_buffer(const char *buffer, size_t length)
{
size_t i;
for(i = 0; i < length; i++)
printf("%02x ", (unsigned int) buffer[i]);
putchar('\n');
}
您可以在加载一个非常短的文件后执行此操作,该文件只包含几个字符。
还要确保终端设置为正确的编码,以便它将字符解释为UTF-8。
发布于 2009-09-03 13:56:05
您的文本文件可能是ISO-8559-1编码的,但是您的终端是UTF-8。在处理面向字节的文本处理时,这种不匹配是一个标准问题;其他C程序(如标准的‘cat’和‘more’命令)也会做同样的事情,通常不认为这是一个错误或需要修复的东西。
如果您希望在Unicode字符级别而不是字节级别进行操作,这是可以的,但是您需要在整个程序中使用wchar而不是char作为字符类型,并为用户提供开关以指定传入的文件编码实际是什么。(虽然有时可以猜测,但它不是很可靠。)
发布于 2009-09-03 14:13:13
我不知道它是否有帮助,但如果您确定终端和输入文件的编码是相同的,您可以尝试setlocale()
#include <locale.h>
…
setlocale(LC_CTYPE, "");
https://stackoverflow.com/questions/1373463
复制相似问题