c++ - 在 C++ 中读取包含 é 等特殊字符的 ISO-8859 类型文件

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


我正在尝试读取一个以 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

任何建议将不胜感激。 提前致谢!


+)
忘了说我的系统环境。
我正在使用 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/

相关文章:

javascript - UTF-8 字符串比较在 javascript 中返回 false

unicode - 手动将 unicode 代码点转换为 UTF-8 和 UTF-16

regex - 向字符类alnum添加特殊符号

mysql - PHP/Mysql 选择和特殊字符

jquery - 如何限制某个表单域中的特殊字符

c++ - 通过C++ fstream分离.txt文件中的注释和数据

c++ - 如何防止为未实现方法的对象生成模板

c++ - 类方法访问

c++ - 系统/统计 S_ISDIR(m) 与结构 dirent

javascript - Javascript 无法正确读取 ASCII > 128 的字符