C库将unicode代码点转换为UTF8?

前端之家收集整理的这篇文章主要介绍了C库将unicode代码点转换为UTF8?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须通过一些文本,并根据字符模式写入UTF8输出.我认为如果我可以使用代码点并将其转换为UTF8,这将很容易.我一直在阅读unicode和UTF8,但找不到一个很好的解决方案.任何帮助将不胜感激.

解决方法

将Unicode代码转换为UTF-8是非常微不足道的,使得调用库可能需要更多的代码,而不仅仅是自己做:
if (c<0x80) *b++=c;
else if (c<0x800) *b++=192+c/64,*b++=128+c%64;
else if (c-0xd800u<0x800) goto error;
else if (c<0x10000) *b++=224+c/4096,*b++=128+c/64%64,*b++=128+c%64;
else if (c<0x110000) *b++=240+c/262144,*b++=128+c/4096%64,*b++=128+c%64;
else goto error;

此外,您自己做的是指您可以将api调整为您需要的工作类型(一次一个字符或长字符串).如果知道输入是有效的Unicode标量值,则可以删除错误情况.

另一个方向是很难得到正确的.我建议使用有限自动方法,而不是典型的位运算循环,有时将无效序列解码为真实字符的别名(这是非常危险的,可能导致安全问题).

编辑:即使你最终还是去图书馆,我想你应该首先尝试写作,或者至少在进一步研究UTF-8规范之前先认真学习.当UTF-8不是一个黑匣子,而是被创建为拥有非常强大的属性时,很多坏的设计可能来自将UTF-8视为一个黑盒子,而对于UTF-8来说,很多新的程序员无法看到这一点,直到他们自己一起工作了很多.

猜你在找的C&C++相关文章