【发布时间】:2010-06-07 02:54:28
【问题描述】:
在 C++ 中逐行读取 Unicode 文件的正确方法是什么?
我正在尝试读取由 Windows 记事本保存为 Unicode (LE) 的文件。
假设文件仅包含单独的行中的字符 A 和 B。
在逐字节读取文件时, 我看到以下字节序列(十六进制):
FE FF 41 00 0D 00 0A 00 42 00 0D 00 0A 00
所以 2 字节 BOM、2 字节 'A'、2 字节 CR、2 字节 LF、2 字节 'B'、2 字节 CR、2 字节 LF。
我尝试使用以下代码读取文本文件:
std::wifstream file("test.txt");
file.seekg(2); // skip BOM
std::wstring A_line;
std::wstring B_line;
getline(file,A_line); // I get "A"
getline(file,B_line); // I get "\0B"
我使用 >> 运算符而不是 getline 得到相同的结果
file >> A_line;
file >> B_line;
看来单字节 CR 字符是 仅作为单个字节消耗。 或 CR NULL LF 正在被消耗,但不是高字节 NULL。 我希望文本模式下的 wifstream 会读取 2byte CR 和 2byte LF。
我做错了什么? 必须阅读文本文件似乎不对 以二进制模式逐字节解析新行。
【问题讨论】: