1

任何人都知道这个更宽松的许可证(麻省理工学院/公共领域)版本:

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

('drop-in' 替换 std::string 即 UTF-8 感知)

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

我真的不想随身携带ICU。

4

3 回答 3

7
  1. std::string 适用于 UTF-8 存储。
  2. 如果您需要分析文本本身,UTF-8 意识对您没有多大帮助,因为 Unicode 中有太多东西在代码点基础上不起作用。

看一下 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 就可以了,否则您将找不到更简单的东西。

于 2010-06-08T11:12:33.820 回答
2

您可能对Björn Höhrmann的灵活且经济的 UTF-8 解码器std::string感兴趣,但绝不是.

于 2010-06-08T11:05:58.600 回答
2

我从未使用过,但不久前偶然发现了这个UTF-8 CPP库,并且有足够的好感将其添加为书签。它是在类似许可证 IIUC 的 BSD 上发布的。

它仍然依赖于std::string字符串,并提供了许多实用函数来帮助检查字符串是否真的是 UTF-8、计算字符数、后退或前进一个字符……它真的很小,只存在于头文件中: 看起来真不错!

于 2010-06-08T11:43:09.360 回答