读取 Unicode 文件 C++

问题描述 投票:0回答:4

我有一个简单的问题要问。我有一个以 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();
c++ visual-c++ unicode file utf-16
4个回答
2
投票

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

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


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

1
投票

就其价值而言,我想我已经读到您必须使用允许您指定编码的 Microsoft 函数。

https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/fopen-s-wfopen-s


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.