7

我有一个简单的问题要问。我有一个以 FFFE 开头的 UTF 16 文本文件可供阅读。处理这种文件的 C++ 工具有哪些?我只想阅读它,过滤一些行并显示结果。

它看起来很简单,但我只是有处理普通 ascci 文件的经验,而且我很着急。我正在使用 VS C++,但我不想使用托管 C++。

问候

这里放一个非常简单的例子

wifstream file; 
file.open("C:\\appLog.txt", ios::in);

wchar_t buffer[2048]; 
file.seekg(2);
file.getline(buffer, bSize-1);

wprintf(L"%s\n", buffer);
file.close();
4

4 回答 4

2

您可以使用fgetws,它读取 16 位字符。您的文件采用小端字节序。由于 x86 机器也是 little-endian,因此您应该能够轻松处理文件。当您想要输出时,请使用fwprintf

另外,我同意更多信息可能有用。例如,您可能正在使用一个抽象出其中一些内容的库。

于 2009-05-23T13:04:09.233 回答
2

由于您很着急,请在二进制模式下使用 ifstream 并完成您的工作。我和你有同样的问题,这挽救了我的一天。(这不是推荐的解决方案,当然,它只是一个 hack)

  ifstream file; 
  file.open("k:/test.txt", ifstream::in|ifstream::binary);

  wchar_t buffer[2048]; 
  file.seekg(2);
  file.read((char*)buffer, line_length);
  wprintf(L"%s\n", buffer);
  file.close();
于 2009-05-23T14:31:04.020 回答
1

对于它的价值,我想我已经读过您必须使用允许您指定编码的 Microsoft 功能。

http://msdn.microsoft.com/en-us/library/z5hh6ee9(VS.80).aspx

于 2009-05-23T12:56:15.770 回答
0

FFFE 只是初始 BOM(字节顺序标记)。像往常一样从文件中读取,但读取到一个宽字符缓冲区。

于 2009-05-23T12:52:40.520 回答