【发布时间】:2015-07-31 12:01:18
【问题描述】:
我正在尝试从 .txt 文件中读取已保存为 Unicode 的行。 我就是这样做的:
wifstream input;
string path = "test.txt";
input.imbue(locale(input.getloc(),
new codecvt_utf16<wchar_t, 0x10ffff, consume_header>));
input.open(path);
if (input.is_open())
{
wstring line;
input.seekg( 1 , ios_base::beg);
getline(input, line);
}
它适用于带有拉丁字符的文件。 但是对于西里尔文文件,我得到奇怪的符号而不是空格和相邻字符。
例如:
输入文件中有什么:
Госдеп США осудил нападение на
我得到了什么:
︓осдепР!ШАР>судилР=ападениеР=а
我做错了什么?
【问题讨论】:
-
确定不是输出问题?仅仅因为您正在阅读 unicode 并不意味着您正在输出到 unicode 环境。
-
我会删除这一行:input.imbue(locale(input.getloc(), new codecvt_utf16
)); -
Re“我做错了什么?”,我感觉很喜欢油嘴滑舌并回答“使用 C++ 标准库”,因为默认情况下它应该这样做。没有必要弄清楚如何使用它。或者解决它。
-
gkhh...俄罗斯政治新闻进入 StackOverflow...Noooo...
-
哦,也许以二进制模式打开文件?试试看。
标签: c++ unicode locale getline cyrillic