substr
、first
、last
等。
问题1
是否有已经实现了上述函数的UTF8库?我已经查看了ICU,但它对我的要求来说太大了。我只需要支持UTF8。我在这里找到了一个UTF8解码器(链接)。下面是该代码中的函数原型。
void utf8_decode_init(char p[], int length);
int utf8_decode_next();
初始化函数接受字符数组,但是 utf8_decode_next() 返回 int 类型。为什么会这样?我如何使用标准函数(如 printf)打印该函数返回的字符?该函数正在处理字符数据,如何将其分配给整数?
如果上述解码器不适用于生产代码,你有更好的建议吗?
问题2:
我也被一些文章搞糊涂了,它们说对于 Unicode,你需要使用 wchar_t。从我的理解来看,这并非必需,因为普通的 C 字符串可以容纳 UTF8 值。我通过查看 SQLite 和 git 的源代码进行了验证。SQLite 有以下 typedef。
typedef unsigned char u8
我理解正确吗?此外,为什么需要使用无符号字符(unsigned char)?
int32_t
是首选类型。正如您所说,int
理论上可能太短,而在任何64位机器上,long
肯定会浪费大量空间。 - R.. GitHub STOP HELPING ICEuint32_t
与int32_t
。 - Jonathan Lefflerint_least22_t
。他们在想什么? - Steve Jessopsubstr
和length
,并没有使用上面的解码器。新的实现看起来更简单。它发布在这里。https://dev59.com/hVLTa4cB1Zd3GeqPd9Qm#4534339 - Navaneeth K N