【发布时间】:2011-02-05 19:35:59
【问题描述】:
我已经阅读了很多讨论这个问题的文章和论坛帖子,所有的解决方案对于这样一个简单的任务来说似乎都太复杂了。
这是直接来自 cplusplus.com 的示例代码:
// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main () {
string line;
ifstream myfile ("example.txt");
if (myfile.is_open())
{
while ( myfile.good() )
{
getline (myfile,line);
cout << line << endl;
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
只要 example.txt 只有 ASCII 字符,它就可以正常工作。如果我尝试用俄语添加一些东西,事情就会变得一团糟。
在 GNU/Linux 中,就像将文件保存为 UTF-8 一样简单。
在 Windows 中,这是行不通的。将文件转换为 UCS-2 Little Endian(Windows 似乎默认使用的)并将所有函数更改为对应的 wchar_t 也不起作用。
难道没有某种“正确”的方法可以在不进行各种魔法编码转换的情况下完成这项工作吗?
【问题讨论】:
-
你可以做到这一点,但它确实需要一些工作。您应该能够通过网络搜索找到所需的信息。此外,Windows 使用 UTF-16 而不是 UCS-2。
-
放弃在Windows上太复杂了,我试了一次,浪费了很多时间。
-
@Adam Rosenfield:这并不能回答问题。 chcp 65001 不能解决问题。
-
如何在 windows 和 linux 之间欺骗不同的 UCS2 字节序?
标签: c++ windows unicode console