读取Unicode文件

gre*_*een 3 c++ unicode text file

我在阅读和使用unicode文件中的内容时遇到问题.

我正在开发unicode版本,我正在尝试从unicode文件中读取内容,但数据有奇怪的字符,我似乎无法找到将数据转换为ASCII的方法.

我正在使用fgets.我尝试了fgetws,WideCharToMultiByte以及我在其他文章和帖子中找到的很多功能,但没有任何效果.

Mih*_*ita 7

因为你提到WideCharToMultiByte我会假设你正在处理Windows.

"从unicode文件中读取内容...找到一种将数据转换为ASCII的方法"

这可能是个问题.如果将Unicode转换为ASCII(或其他遗留代码页),则会遇到损坏/丢失数据的风险.由于您正在"处理unicode发布版本",因此您需要读取Unicode 并保留 Unicode.

所以你的最终缓冲区必须是wchar_t(或者WCHAR,或者CStringW同样的东西).

所以你的文件可能是utf-16,或utf-8(utf-32非常罕见).对于utf-16,结束也可能很重要.如果有一个物料清单可以帮助很多.

快速步骤:

  • 打开文件wopen,或_wfopen作为二进制文件
  • 读取第一个字节以使用BOM识别编码
  • 如果编码是utf-8,则读入一个字节数组并转换为wchar_twith WideCharToMultiByteCP_UTF8
  • 如果编码是utf-16be(大端)读取wchar_t数组和_swab
  • 如果编码是utf-16le(小端)读取wchar_t数组,你就完成了

另外(如果您使用较新的Visual Studio),您可以利用MS扩展_wfopen.它可以将编码作为模式的一部分(类似于_wfopen(L"newfile.txt", L"rw, ccs=<encoding>");编码为UTF-8或UTF-16LE).它还可以根据BOM检测编码.

警告:跨平台是有问题的,wchar_t可以是2或4个字节,转换例程不可移植...

有用的链接: