如何从 UTF-8 char * 切换到使用 Win32 API 的动态编码?
How do I switch from UTF-8 char * to a dynamic encoding with Win32 API?
我目前正在开发一个在 Node.js 中使用 Hunspell 的项目。目标是跨平台拼写检查,正确编码 (node-spellchecker
)。
我必须使用具有不同编码的任意词典。大多数在 *.aff
文件中有 SET UTF-8
,但其他词典有像 SET ISO8859-1
这样的编码。我从 Node 获得 UTF-8,但我需要将其转换为字典的编码。然后,我需要将其反向转换以处理建议。
使用 Linux,我可以使用 iconv
来转换它,但我在 Windows 方面没有那个。但是,我不想要求 UTF-8 字典(有效)。
任何关于从哪里开始的建议或提示将不胜感激。 WideCharToMultiByte
用于一步,但我找不到我期望的 MultiByteToMultiByte
。
我有的东西
const char *from_encoding_name = "UTF-8"; // This can be swapped
const char *to_encoding_name = "ISO8859-1"; // This can be swapped
const char *word = /* möchtzn encoded in UTF-8 */;
我想要的东西
const char *dictionaryWord = /* möchtzn encoded in ISO-8859-1 */;
谢谢。
我认为 WinAPI
中不存在模拟 MultiByteToMultiByte
。我会使用两个调用:MultiByteToWideChar
和 WideCharToMultiByte
。
顺便说一句,我查看了 .Net 方法的来源 Encoding.Convert,也有通过 UTF-16
完成的转换。
仅供参考,iconv.exe
可用于 Windows,您只需手动安装即可。或者您可以直接将 libiconv
嵌入到您的项目中。
也就是说,您所要求的可以使用 Microsoft API 完成:
Win32 MultiByteToWideChar()
and WideCharToMultiByte()
函数。首先使用 MultiByteToWideChar(CP_UTF8)
将 UTF-8 输入解码为 UTF-16,然后使用 WideCharToMultiByte(28591)
(或您需要的任何目标代码页)将 UTF-16 编码为 ISO-8859-1。然后在返回时交换代码页。
IMultiLanguage::ConvertString()
method, or the IMultiLanguage::CreateConvertCharset()
and IMLangConvertCharset::DoConversion()
方法。这些可以将输入从一个代码页直接转换为另一个代码页。
您可以使用其中任何一个来实现您自己的 MultiByteToMultiByte()
包装函数。
我目前正在开发一个在 Node.js 中使用 Hunspell 的项目。目标是跨平台拼写检查,正确编码 (node-spellchecker
)。
我必须使用具有不同编码的任意词典。大多数在 *.aff
文件中有 SET UTF-8
,但其他词典有像 SET ISO8859-1
这样的编码。我从 Node 获得 UTF-8,但我需要将其转换为字典的编码。然后,我需要将其反向转换以处理建议。
使用 Linux,我可以使用 iconv
来转换它,但我在 Windows 方面没有那个。但是,我不想要求 UTF-8 字典(有效)。
任何关于从哪里开始的建议或提示将不胜感激。 WideCharToMultiByte
用于一步,但我找不到我期望的 MultiByteToMultiByte
。
我有的东西
const char *from_encoding_name = "UTF-8"; // This can be swapped
const char *to_encoding_name = "ISO8859-1"; // This can be swapped
const char *word = /* möchtzn encoded in UTF-8 */;
我想要的东西
const char *dictionaryWord = /* möchtzn encoded in ISO-8859-1 */;
谢谢。
我认为 WinAPI
中不存在模拟 MultiByteToMultiByte
。我会使用两个调用:MultiByteToWideChar
和 WideCharToMultiByte
。
顺便说一句,我查看了 .Net 方法的来源 Encoding.Convert,也有通过 UTF-16
完成的转换。
仅供参考,iconv.exe
可用于 Windows,您只需手动安装即可。或者您可以直接将 libiconv
嵌入到您的项目中。
也就是说,您所要求的可以使用 Microsoft API 完成:
Win32
MultiByteToWideChar()
andWideCharToMultiByte()
函数。首先使用MultiByteToWideChar(CP_UTF8)
将 UTF-8 输入解码为 UTF-16,然后使用WideCharToMultiByte(28591)
(或您需要的任何目标代码页)将 UTF-16 编码为 ISO-8859-1。然后在返回时交换代码页。IMultiLanguage::ConvertString()
method, or theIMultiLanguage::CreateConvertCharset()
andIMLangConvertCharset::DoConversion()
方法。这些可以将输入从一个代码页直接转换为另一个代码页。
您可以使用其中任何一个来实现您自己的 MultiByteToMultiByte()
包装函数。