读取Unicode文件C ++

时间:2009-05-23 12:45:57

标签: c++ visual-c++ unicode file utf-16

我有一个简单的问题要问。我有一个UTF 16文本文件,以FFFE开头。有哪些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 个答案:

答案 0 :(得分:2)

您可以使用fgetws,它读取16位字符。您的文件是little-endian,字节顺序。由于x86机器也是little-endian,你应该能够轻松处理文件。如果要进行输出,请使用fwprintf

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

答案 1 :(得分:2)

由于您处于匆忙状态,请在二进制模式下使用ifstream并完成工作。我和你有同样的问题,这节省了我的一天。 (这不是推荐的解决方案,当然,它只是一个黑客攻击)

  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();

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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