读取包含特殊字符的ISO-8859类型文件,例如C ++中的é

时间:2012-01-29 13:10:06

标签: c++ utf-8 special-characters ansi ifstream


我正在尝试读取一个用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)控制台 谢谢!

1 个答案:

答案 0 :(得分:7)

您的控制台设置为使用UTF-8,因此当您使用cout将ISO-8859-15中的文件转储到控制台时,它会显示错误的字母。带有ascii代码&lt; 128的字母在两种编码中都是相同的,这意味着所有这些字符都会在屏幕上正确显示。

程序的输出实际上是正确的,只是你的控制台没有设置为正确显示输出。

我还建议在不是ascii的文件上使用ios::binary,否则以后可能会在其他平台上遇到问题。