C ++ UTF-8轻量级&许可代码?

时间:2010-06-08 10:56:31

标签: c++ utf-8 glib

任何人都知道更宽松的许可证(MIT /公共域)版本:

http://library.gnome.org/devel/glibmm/unstable/classGlib_1_1ustring.html

(知道UTF-8的std :: string的'drop-in'替换)

轻量级,做我需要的一切甚至更多(怀疑我甚至会使用UTF-XX转换)

我真的不想随身携带ICU。

3 个答案:

答案 0 :(得分:7)

  1. std :: string适用于UTF-8存储。
  2. 如果你需要分析文本本身,UTF-8意识对你没有多大帮助,因为Unicode中有太多东西不能在码点基础上运行。
  3. 看看Boost.Locale库(它在引擎盖下使用ICU):

    它不是轻量级的,但它允许您正确处理Unicode,并使用std::string作为存储。

    如果您希望找到支持Unicode的轻量级库来处理字符串,那么您将找不到这样的东西,因为Unicode不是轻量级的。即使是相对“简单”的东西,如大写,小写转换或Unicode规范化,也需要复杂的算法和Unicode数据库访问。

    如果您需要能够迭代代码点(BTW 字符) 看看http://utfcpp.sourceforge.net/

    回答评论:

      

    1)查找我所包含文件的文件格式

    std :: string :: find对此完全没问题。

      

    2)断线检测

    这不是一个简单的问题。您有没有试过在中文/日文文本中找到换行符?可能不是因为空间不能分隔单词。因此,断线检测很难。 (我不认为即使是glib也能做到这一点,我认为只有pango有类似的东西)

    当然,Boost.Locale会正确地做到这一点。

    如果您只需要为欧洲语言执行此操作,只需搜索空格或标点符号,这样std::string::find就更好了。

      

    3)字符(或现在,代码点)计数查看utfcpp thx

    字符不是代码点,例如希伯来语单词Shalom - “שָלוֹם”由4个字符和6个Unicode点组成,其中两个代码点用于元音。对于欧洲语言也是如此,其中单个字符用两个代码点表示,例如:“ü”可以表示为“u”和“¨” - 两个代码点。

    所以,如果你意识到这些问题,那么utfcpp会好的,否则你就不会 找到更简单的东西。

答案 1 :(得分:2)

您可能对BjörnHöhrmann的Flexible and Economical UTF-8 Decoder感兴趣,但绝不是std::string的替代品。

答案 2 :(得分:2)

我从来没有使用过,但是前一段时间偶然发现了这个UTF-8 CPP库,并且有足够好的感觉来为它添加书签。它在像许可证IIUC这样的BSD上发布。

它仍然依赖std::string表示字符串,并提供了许多实用程序函数来帮助检查字符串是否真的是UTF-8,计算字符数,返回或转发一个字符......它是真的很小,只存在于头文件中:看起来真的很棒!