我正在尝试读取一个以 ISO-8859(ansi) 编码的文件,它包含一些西欧字符,例如“é”。
当我尝试读取文件并输出结果时,所有特殊字符都显示为 �,而正常字母显示正确。
如果我将文件转换为 utf-8 格式,然后执行相同的工作,一切都会完美无缺。
有没有人有解决这个问题的想法?我尝试使用 wifstream 和 wstring 而不是 ifstream 和 string 但没有太大帮助。
这是我的示例代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream myFS;
myFS.open("test.txt", ios::in);
string myString;
if(myFS.is_open()){
while(myFS >> myString)
cout << myString << endl;
}
myFS.close();
return 0;
}
test.txt(ISO-8859-15 格式)包含:
abcd éfg
结果:
abcd
�fg
任何建议将不胜感激。 提前致谢!
+)
忘了说我的系统环境。
我正在使用 ubuntu 10.10(Maverick) 控制台和 g++ ver 4.4.5
谢谢!
最佳答案
您的控制台设置为使用 UTF-8,因此当您使用 cout 将 ISO-8859-15 中的文件转储到控制台时,它会显示错误的字母。 ASCII 代码 <128 的字母在两种编码中是相同的,这意味着所有这些字符都将正确显示在您的屏幕上。
程序的输出实际上是正确的,只是您的控制台没有设置为正确显示输出。
我还建议在并非全是 ascii 的文件上使用 ios::binary
,否则您以后在其他平台上可能会遇到问题。
关于c++ - 在 C++ 中读取包含 é 等特殊字符的 ISO-8859 类型文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9053410/