将C-Strings从本地编码转换为UTF8

我正在写一个小的应用程序,我从中读取一些文本到控制台,然后存储在一个经典的字符*string。
在发生的时候,我需要将它传递给一个仅使用UTF-8编码的string的库。 由于Windows控制台使用本地编码,我需要从本地编码转换为UTF-8。
如果我没有弄错,我可以使用MultiByteToWideChar(..)编码为UTF-16,然后使用WideCharToMultiByte(..)转换为UTF-8。

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

Solutions Collecting From Web of "将C-Strings从本地编码转换为UTF8"

从UTF-16转换为UTF-8纯粹是一个机械过程,但是从本地编码转换为UTF-16或UTF-8涉及到一些大的专用查找表。 C运行时只是转身,并为非平凡的情况下调用WideCharToMultiByte和MultiByteToWideChar。

至于不得不使用UTF-16作为中间阶段,据我所知,没有任何方法 – 抱歉。

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

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

POSIX世界喜欢iconv库就是这样。 它使用char *从几乎每一种编码转换而来。