有没有办法可移植(即符合C标准)将主机字符编码中的字符串转换为Unicode代码点数组?我正在研究一些数据序列化软件,我遇到了一个问题,因为虽然我需要通过线路发送UTF-8,但C标准并不保证ASCII编码,因此在主机字符编码中转换字符串可能是一项非常重要的任务。
是否有图书馆为我照顾这种东西? C标准库中是否隐藏了可以执行此类操作的功能?
答案 0 :(得分:1)
C11标准,ISO / IEC 9899:2011,有一个新的标题<uchar.h>
,有基本的设施可以提供帮助。它在§7.28Unicode实用程序<uchar.h>
。
定义了两对函数:
c16rtomb()
和mbrtoc16()
- 使用char16_t
类型uint_least16_t
。c32rtomb()
和mbrtoc32()
- 使用char32_t
类型uint_least32_t
。名称中的r
用于'可重启';这些函数旨在迭代调用。 mbrtoc{16,32}()
对从多字节代码集(因此为mb
)转换为char16_t
或char32_t
。 c{16,32}rtomb()
对从char16_t
或char32_t
转换为多字节字符序列。
我不确定他们是否会做你想做的事。 {@ 1}}标题因此功能在Mac OS X 10.9.1上不可用Apple提供的<uchar.h>
或'home-built'GCC 4.8.2,所以我没有有机会调查他们。该标题似乎在Linux(Ubuntu 13.10)和GCC 4.8.1上可用。
我认为ICU可能是一个更好的选择 - 然而,它是一个相当大的库(但这是因为它总体上支持一般的Unicode和一般的不同语言环境)。 / p>