gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:01:55 26 4
gpt4 key购买 nike


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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com