【问题标题】:process std::string with utf8proc使用 utf8proc 处理 std::string
【发布时间】:2013-01-18 16:11:28
【问题描述】:

我的 C++ 代码中有一个 std::string 标题。不幸的是,我不知道该标题的编码,有时可能会有所不同,但并不总是 utf8。但是,由于我需要使用 pp:Var (https://developers.google.com/native-client/peppercpp/classpp_1_1_var) 发送它,因此我需要将其转换为有效的 utf8。
所以我尝试通过 utf8proc (http://www.public-software-group.org/utf8proc-documentation) 转换它。我想我应该使用 utf8proc_iterate 函数,但我不明白为什么该函数的输出是 int 类型的?!我如何将其作为字符串获取?

【问题讨论】:

  • 如果您不知道编码,您将如何转换它?你还在第一方
  • 如果你不知道它的编码,你几乎别无选择,只能弄清楚那个编码是什么。

标签: c++ utf-8


【解决方案1】:

当您不知道从什么转换数据时,您无法转换数据。检查数据是否为有效的 UTF-8 很容易,但如果遇到不是 UTF-8 的数据,那么您不知道编码实际上是什么就很不幸。您必须使用分级法来猜测编码,而且您有时会猜错。

utf8proc_iterate() 返回一个int32_t,因为它正在遍历已经 UTF-8 编码的数据并将其解码为未编码的 Unicode 代码点,其大小为 21 位(计算机没有 21 位整数类型,因此而是使用 32 位整数)。要使用 utf8proc(或任何其他编码)将数据编码为 UTF-8,您必须首先从未编码的 Unicode 代码点的数据开始。要获得这些,您必须知道原始数据的编码方式,以便您可以将其属性解码为 Unicode,然后再将其重新编码为 UTF-8。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2011-03-26
    相关资源
    最近更新 更多