【发布时间】:2012-07-25 05:51:11
【问题描述】:
我正在编写一个程序来获取 UCS-2 Little Endian 中 *.rc 文件编码中的信息。
int _tmain(int argc, _TCHAR* argv[]) {
wstring csvLine(wstring sLine);
wifstream fin("en.rc");
wofstream fout("table.csv");
wofstream fout_rm("temp.txt");
wstring sLine;
fout << "en\n";
while(getline(fin,sLine)) {
if (sLine.find(L"IDS") == -1)
fout_rm << sLine << endl;
else
fout << csvLine(sLine);
}
fout << flush;
system("pause");
return 0;
}
“en.rc”中的第一行是#include <windows.h>,但sLine显示如下:
[0] 255 L'ÿ'
[1] 254 L'þ'
[2] 35 L'#'
[3] 0
[4] 105 L'i'
[5] 0
[6] 110 L'n'
[7] 0
[8] 99 L'c'
. .
. .
. .
此程序可以正确处理 UTF-8。 UCS-2 怎么办?
【问题讨论】:
-
您的示例代码甚至无法编译,因为它使用了未声明的变量
fout_rm。 -
我粘贴的时候错过了声明行,代码已经更新了
-
顺便说一下,此代码不适用于 UTF-8 输入(类似的代码也不适用)。您可能很幸运,因为您只使用了前 127 个代码点中的字符。 C++ 流无法解码不同的编码,它们完全与编码无关。
-
看起来您的“UCS-2 文件”实际上是一个带有 a byte-order marker 的 UTF-16 文件。
标签: c++ unicode encoding character-encoding wofstream