我正在尝试读取一个文件,它是在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
任何建议都将不胜感激。提前感谢你!
+)
我忘了提到我的系统环境。
我使用的是ubuntu10.10(Maverick)控制台和g++ ver4.4.5
谢谢!
1条答案
按热度按时间cbeh67ev1#
您的控制台设置为使用UTF-8,所以当您使用cout将ISO-8859-15格式的文件转储到控制台时,它会显示错误的字母。ASCII码〈128的字母在两种编码中是相同的,这意味着所有这些字符都将正确地显示在屏幕上。
程序的输出实际上是正确的,只是您的控制台没有设置为正确显示输出。
我还建议对不全是ascii的文件使用
ios::binary
,否则以后在其他平台上可能会遇到问题。