有人可以提供一些示例代码来删除变音符号(即,用不带重音,不变音的字符等价物替换带重音符号,变音符号等的字符,例如,每个重音的é都将变成纯ASCII e)在C++中使用ICU库使用UnicodeString?例如。:

UnicodeString strip_diacritics( UnicodeString const &s ) {
    UnicodeString result;
    // ...
    return result;
}

假设s已经被标准化。谢谢。

最佳答案

ICU使您可以使用特定规则对字符串进行音译。我的规则是NFD; [:M:] Remove; NFC:分解,删除变音符号,重新组合。以下代码以UTF-8 std::string作为输入,并返回另一个UTF-8 std::string:

#include <unicode/utypes.h>
#include <unicode/unistr.h>
#include <unicode/translit.h>

std::string desaxUTF8(const std::string& str) {
    // UTF-8 std::string -> UTF-16 UnicodeString
    UnicodeString source = UnicodeString::fromUTF8(StringPiece(str));

    // Transliterate UTF-16 UnicodeString
    UErrorCode status = U_ZERO_ERROR;
    Transliterator *accentsConverter = Transliterator::createInstance(
        "NFD; [:M:] Remove; NFC", UTRANS_FORWARD, status);
    accentsConverter->transliterate(source);
    // TODO: handle errors with status

    // UTF-16 UnicodeString -> UTF-8 std::string
    std::string result;
    source.toUTF8String(result);

    return result;
}

关于c++ - 使用ICU去除变音标记的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2992066/

10-12 20:47