我正在尝试读取一个用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
任何建议将不胜感激。 提前谢谢!
+)
忘了提我的系统环境。
我正在使用带有g ++ ver 4.4.5的ubuntu 10.10(Maverick)控制台
谢谢!
答案 0 :(得分:7)
您的控制台设置为使用UTF-8,因此当您使用cout将ISO-8859-15中的文件转储到控制台时,它会显示错误的字母。带有ascii代码&lt; 128的字母在两种编码中都是相同的,这意味着所有这些字符都会在屏幕上正确显示。
程序的输出实际上是正确的,只是你的控制台没有设置为正确显示输出。
我还建议在不是ascii的文件上使用ios::binary
,否则以后可能会在其他平台上遇到问题。