将C字符串从本地编码转换为UTF8

时间:2009-12-27 01:43:44

标签: c++ windows visual-studio unicode visual-c++

我正在写一个小应用程序,其中我从控制台读取一些文本,然后存储在经典的char *字符串中。
碰巧我需要将它传递给一个只接受UTF-8编码字符串的lib。由于Windows控制台使用本地编码,我需要从本地编码转换为UTF-8 如果我没有弄错,我可以使用MultiByteToWideChar(..)编码为UTF-16,然后使用WideCharToMultiByte(..)转换为UTF-8。

但是我想知道是否有一种方法可以直接从本地编码转换为UTF-8而无需使用任何外部Libs,因为转换为wchar的想法只是为了能够转换回char(utf-8编码)但是,对我来说似乎有点奇怪。

2 个答案:

答案 0 :(得分:4)

POSIX世界非常喜欢iconv lib。它使用char *从和转换为几乎每个编码。

答案 1 :(得分:4)

从UTF-16转换为UTF-8纯粹是一个机械过程,但是从本地编码转换为UTF-16或UTF-8涉及一些大型专用查找表。 c-runtime只是转向并调用WideCharToMultiByte和MultiByteToWideChar来处理非平凡的情况。

至于必须使用UTF-16作为中间阶段,据我所知,没有办法解决这个问题 - 抱歉。

由于您已经链接到外部库以获取文件输入,因此您也可以链接到同一个库以获取WideCharToMultiByte和MultiByteToWideChar。

使用c-runtime将使您的代码可以重新编译到其他操作系统(理论上),但它也会在您和库之间增加一层开销,在这种情况下完成所有实际工作 - kernel32。 DLL。