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

1 c++ glib utf-8

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

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

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

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

我真的不想随身携带ICU.

Art*_*yom 7

  1. std :: string适用于UTF-8存储.
  2. 如果你需要分析文本本身,UTF-8意识对你没有多大帮助,因为Unicode中有太多东西不能在codepoint base上运行.

看看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会没问题,否则你就找不到更简单的东西了.