ICU与C ++中的Boost Locale

时间:2012-02-29 06:15:12

标签: c++ boost unicode c++11 icu

我正在考虑使用ICU或Boost Locale。

各自的优点和缺点是什么?

我知道两者都使用ICU,但是ICU被Boost Locale隐藏。根据{{​​3}}:“......整个ICU API隐藏在不透明指针之后,用户无法访问它。”

在比较这些库时,请考虑C ++ 11中的新Unicode功能。

3 个答案:

答案 0 :(得分:16)

ICU是一个非常好的图书馆,但它有缺点:

  1. API在现代C ++设计方面非常糟糕,并且与标准C ++库不兼容
  2. 面向UTF-16
  3. 它的消息翻译工具远非完美,这就是为什么Boost.Locale使用Gettext模型
  4. 请参阅:http://www.boost.org/doc/libs/1_49_0/libs/locale/doc/html/rationale.html#why_icu

    Boost.Locale以C ++方式进行本地化,并允许使用除ICU之外的其他后端(当然ICU更好),因此在许多情况下Boost.Locale为您提供更好的本地化替代方案,因为它更简单,专为现代设计C ++,通常更容易使用。

    当然,如果您需要Boost.Locale不支持的非常复杂的算法 或者你的应用程序所做的只是Unicode处理,然后ICU可能会更好,除了Boost.Locale更适合本地化C ++应用程序。

答案 1 :(得分:3)

Boost.Locale使用ICU作为其默认后端。 Boost.Locale也可以使用一些other backends。您可以将Boost.Locale视为更好的ICU接口。

答案 2 :(得分:1)

ICU由国际化专家设计,而boost则由C ++程序员设计。

虽然强大而优雅的C ++,但是很多国际化的错误。 现在,boost是一个很大的库集合,有些比其他的更好。 但ICU在整个过程中都是稳固的,除了微软之外,它几乎被所有人用作基础。

因此,如果您想要实现可靠的国际化,请选择ICU。 如果你想要尖端的C ++(但是我有点不稳定),那就去吧。