2009-05-23 91 views
7

我有一个简单的问题要问。我有一个以FFFE开头的UTF 16文本文件。什么是C++工具来处理这种文件?我只想读取它,过滤一些行并显示结果。阅读Unicode文件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(); 

回答

2

您可以使用fgetws,其内容为16位字符。您的文件采用小端,字节顺序。由于x86机器也是小端,你应该能够处理文件,而不会有太多麻烦。当你想要输出时,使用fwprintf

此外,我同意更多信息可能会有用。例如,你可能正在使用一个抽象出一些这样的库。

+0

是的,你说的都是,更多的信息可能会有用。我尝试了msdn,Jeffrey Richter的书,但是在谈论这个主题时,他们似乎没有很好的例子。谢谢 – Andres 2009-05-23 13:07:48

0

的FFFE只是初始BOM(字节顺序标记)。只需像通常那样从文件中读取数据,然后将其转换为宽字符缓冲区。

+0

示例代码始终是一个好主意 - 你怎么知道他是如何正常读取文件? – 2009-05-23 12:53:51

+0

虽然我同意你的看法,但是安德烈斯说:“但我只是在使用简单的ascci文件方面有经验。” ;) – xian 2009-05-23 13:08:23

1

由于您很着急,请在二进制模式下使用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();