任何人都知道更宽松的许可证(MIT /公共域)版本:
http://library.gnome.org/devel/glibmm/unstable/classGlib_1_1ustring.html
(知道UTF-8的std :: string的'drop-in'替换)
轻量级,做我需要的一切甚至更多(怀疑我甚至会使用UTF-XX转换)
我真的不想随身携带ICU。
答案 0 :(得分:7)
看看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,计算字符数,返回或转发一个字符......它是真的很小,只存在于头文件中:看起来真的很棒!