dev*_*van 2 c++ ansi utf-8 special-characters 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;
}
Run Code Online (Sandbox Code Playgroud)
test.txt(ISO-8859-15格式)包含:
abcd éfg
Run Code Online (Sandbox Code Playgroud)
结果:
abcd
?fg
Run Code Online (Sandbox Code Playgroud)
任何建议将被认真考虑.先感谢您!
+)
忘了提及我的系统环境.
我正在使用ubuntu 10.10(Maverick)控制台与g ++ ver 4.4.5
谢谢!
您的控制台设置为使用UTF-8,因此当您使用cout将ISO-8859-15中的文件转储到控制台时,它会显示错误的字母.ascii代码<128的字母在两种编码中都是相同的,这意味着所有这些字符都将在屏幕上正确显示.
程序的输出实际上是正确的,它只是你的控制台没有设置为正确显示输出.
我还建议使用ios::binary不是ascii的文件,否则以后可能会在其他平台上遇到问题.
| 归档时间: |
|
| 查看次数: |
1636 次 |
| 最近记录: |