【发布时间】:2011-06-05 20:03:49
【问题描述】:
我有一个保存为 UTF-8 的文件,我正在这样读取它:
ReadFile(hFile, pContents, pFile->nFileSize, &dwRead, NULL);
(pContents 是一个大小为 nFileSize 的 BYTE*)
它只是一个 100 字节左右的小文件,包含我想以 wchar_t* 格式读入内存的文本,因此我可以使用 unicode 文本设置编辑和静态控件的文本。
如何将字节转换为 UTF-8?
编辑(我不想使用 fstream 或 wfstream)
【问题讨论】:
-
字节是已经是UTF-8,如果你正在阅读UTF-8编码的文本。 C++ 和 C 都不关心编码,它们只看到一个字节数组。你到底想做什么?
-
我认为 utf-8 是多字节的,就像它有时需要 2 个字节来完成一个字符,我只是将它读入一个字节数组
-
对。因此,数组中的 2、3 或 4 个字节可以共同确定一个字符。这是 UTF-8。您不能将其“转换”为 UTF-8,因为它已经是 UTF-8。您可以将其转换为 UTF-32 以处理字符,但这在实践中很少有用,除非您正在执行高级文本处理。将其保留为 UTF-8,除非您知道不起作用的原因。
-
有多种 Unicode 编码。 UTF-8 每个代码点使用从 8 位到 32 位的任何内容,UTF-16 每个代码点使用一个或两个 16 位“代码单元”,而 UTF-32 对每个代码点使用 32 位。您可以确定不会遇到“未完成”字符的唯一方法是将数据转换为 UTF-32 并使用 4 个字节存储每个字符。
-
您只需要 Unicode 代码点来查找字符属性,例如大小写。如果您有一个程序在按原样传递非 ASCII 字节的同时对 ASCII 字符执行操作(例如,编写一个 CSV 解析器,其中只有
,、"和\n具有语法意义),那么您可以只需将您的字符串保留为 UTF-8。 ASCII 兼容性是最初发明 UTF-8 的原因。
标签: c++ c winapi unicode utf-8