【发布时间】:2016-01-12 17:19:55
【问题描述】:
谁能告诉我强制 Windows 处理 big endian UTF-16 所需的秘密无证黑魔法咒语吗?
只需调用 WideCharToMultiByte() 即可将 UTF-16LE 转换为 UTF-8。但是我如何使它适用于 UTF-16BE?我已经搜索和搜索并搜索了,我找不到任何有关此的信息。 (我不可能是地球上第一个需要这样做的人……)
很明显,大端序数并不是英特尔平台所固有的,但 Windows 肯定有一个 API 可以在某个地方处理这个问题。
【问题讨论】:
-
我不认为是这样(因为它不是受支持的编码)。只需自己交换endieness(是那个词),然后致电
WideCharToMultiByte -
Richard 是对的,也是正确的选择。 Windows 期望输入在 LE 中。准备 Windows 想要的数据并获得所需的数据。 @RichardCritten:可能值得作为答案。
-
_swab() 完成工作。一个posix函数,呵呵。
-
@HansPassant 这绝对是答案:)。除了swab是posix函数,_swab是microsft的版本^^.
-
但是...如果您有一个以 UTF-16BE 编码并带有 BOM 的文件,诸如记事本之类的程序可以很好地加载它。你真的是说每个需要处理 UTF-16BE 的程序都独立地重新实现它吗?