将Unicode码点转换为UTF-8的最简单方法

7

如何在C语言中将Unicode码点转换为UTF-8字节序列?我能想到的唯一方法是使用iconv函数将UTF-32LE编码映射到UTF-8,但这似乎有些过度。


我最终还是选择了iconv。这可能看起来有些过度,但似乎这是唯一的真正解决方案,而不引入外部依赖。 - Lily Ballard
为什么不接受 @JesperE 的答案并点赞呢? - tvanfosson
5
“不再相关”通常用于产品中的漏洞得到修复或更好的工具被引入,而不是当提问者对答案不再感兴趣时使用。 - buti-oxa
3个回答

8

Unicode 转换并不是一项简单的任务。对我来说,使用 iconv 并不过分。也许有一个库版本的 iconv 可以使用,以避免进行 system() 调用,如果您想要避免这种情况。


1
对于这个方向,这是一个非常简单的任务。不需要使用任何库。此外,iconv 在 POSIX 中既指 C 接口又指实用程序。我怀疑 OP 是在谈论 C 接口,这将是一个非常好的选择,但自己编写也不难。另一个方向(UTF-8 到代码点)容易出错。 - R.. GitHub STOP HELPING ICE

5
我可以建议使用ICU,这是一个相当“行业标准”的处理i18n问题的方法。
我自己没有使用过C版本,但我认为ucnv_fromUnicode可能是你想要的函数。

我不打算为这个任务引入对一组新的非系统提供的库的依赖。谢谢你的建议,不过。 - Lily Ballard

3

请注意,此代码仅处理0x10000以下的代码点(因为Windows上的wchar_t实际上是UTF-16)。 - Trevor Robinson
1
代码在 WayBack Machine 的链接:http://web.archive.org/web/20100305210636/http://www.deanlee.cn/programming/convert-unicode-to-utf8/ - Eloff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接