读取C++中的Unicode文件

8

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

看起来很简单,但我只有处理纯ASCII文件的经验,而且我很赶时间。我正在使用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个回答

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

Nick的回答真的帮了我很大的忙。fgetws需要一个指定大小的缓冲区。 - Ed Bayiates

2
您可以使用fgetws,它可以读取16位字符。您的文件是按小端字节顺序存储的。由于x86机器也是小端字节序,因此您应该能够轻松处理该文件。当您想要进行输出时,请使用fwprintf
另外,我同意提供更多的信息可能会有帮助。例如,您可能正在使用一个抽象出部分内容的库。

是的,你说得没错,更多的信息可能会有用。我在 MSDN 和 Jeffrey Richter 的书上尝试过了,但似乎他们在谈论这个主题时没有很好的例子。谢谢。 - Andres

1

这里应该不需要那个。 - Matthew Flaschen

0

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


示例代码总是一个好主意 - 你怎么知道他通常如何读取文件? - anon
虽然我同意你的观点,Neil,但是Andres说:“但是我只有处理纯ASCII文件的经验。” ;) - xian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接