Utf 8 ICU需要中间UTF16转换步骤

Utf 8 ICU需要中间UTF16转换步骤,utf-8,icu,Utf 8,Icu,为什么libicu使用utf16作为“公分母”格式而不是utf8?我需要从utf8转换到utf32,然后再转换回来,libicu需要这两个步骤utf8->utf16->utf32转换,这似乎使转换变得不必要的困难,尽管它本身的功能,如u tolower也需要UChar32输入 内存似乎不是这里的决定因素,否则他们也可以使用utf8作为其“基本”格式。UTF-16是Unicode标准的默认编码形式,因此我怀疑这回答了其中的“为什么”。有关更多信息,请参阅。所有UTF都可以直接相互转换,而不会丢失数

为什么
libicu
使用
utf16
作为“公分母”格式而不是
utf8
?我需要从
utf8
转换到
utf32
,然后再转换回来,
libicu
需要这两个步骤
utf8->utf16->utf32
转换,这似乎使转换变得不必要的困难,尽管它本身的功能,如
u tolower
也需要
UChar32
输入


内存似乎不是这里的决定因素,否则他们也可以使用
utf8
作为其“基本”格式。

UTF-16是Unicode标准的默认编码形式,因此我怀疑这回答了其中的“为什么”。有关更多信息,请参阅。

所有UTF都可以直接相互转换,而不会丢失数据,但将一个字符集转换为另一个字符集需要通过Unicode进行两步转换,UTF-16比UTF-8更易于使用,大多数平台在内存中使用UTF-16进行Unicode字符串处理,而UTF-8更多地用于存储和通信(*Nix是一个例外,因为它也喜欢在内存中使用UTF-8)。因此,他们可能只是在转换
UTF-8->UTF-32
时保持了与转换
CharsetX->CharsetY
相同的处理模型,以实现一致性,而无需尽可能优化。您可以使用
ucnv_from algorithmic
ucnv_to algorithmic
来提高效率。链接: