在C++中阅读包含特殊字符(如é)的ISO-8859类型文件

hwamh0ep  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(107)

我正在尝试读取一个文件,它是在ISO-8859(ansi)编码,它包含一些西欧字符,如“é"。
当我尝试读取文件并输出结果时,所有特殊字符都显示为“,而正常字母表显示正确。
如果我把文件转换成UTF-8格式,然后做同样的工作,一切都工作得很完美。
有人有办法解决这个问题吗?我试着用 wifstreamwstring 代替 ifstreamstring,但没有多大帮助。
下面是我的示例代码:

#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
谢谢!

cbeh67ev

cbeh67ev1#

您的控制台设置为使用UTF-8,所以当您使用cout将ISO-8859-15格式的文件转储到控制台时,它会显示错误的字母。ASCII码〈128的字母在两种编码中是相同的,这意味着所有这些字符都将正确地显示在屏幕上。
程序的输出实际上是正确的,只是您的控制台没有设置为正确显示输出。
我还建议对不全是ascii的文件使用ios::binary,否则以后在其他平台上可能会遇到问题。

相关问题