【问题标题】:How can I determine the Unicode block of a character, specifically a Qt QChar?如何确定字符的 Unicode 块,特别是 Qt QChar?
【发布时间】:2010-12-12 20:22:52
【问题描述】:

在 Java 中,我可以使用 Unicode.blockOf(Character) 来确定特定字符是否是日本汉字。我正在尝试对 QChar 做同样的事情,但找不到相关的函数来执行此操作。我想知道我是否只是错过了它,还是我必须自己推出,如果是这样 - 怎么做?

【问题讨论】:

    标签: c++ qt unicode qchar


    【解决方案1】:

    有QChar::Category,但它不能提供您需要的一切。

    为了检查一个字符是否在一定范围内,你可以写一个这样的函数:

    bool inRange(QChar c, ushort b, ushort e) {
        return (c.unicode() >= b) && (c.unicode() <= e);
    }
    

    你可以这样使用它:

    inRange(c, 0x3040, 0x309F); // Hiragana?
    

    当然,您可以更进一步,使其更抽象并列举范围:

    inRange(c, Range::Hiragana);
    

    here 是 Unicode 块的列表

    【讨论】:

    • 为什么不直接“返回 c.unicode() >= b && c.unicode()
    • 是的,那确实会更好:) 已编辑。
    【解决方案2】:

    我不知道是否有更好的 Qt 特定方法。如果没有,您可以尝试使用 ICU 而不是滚动您自己的解决方案。

    ICU 既有“C/C++”版本,也有 Java 版本。 ICU 的 Java 版本实际上与 i18n/l10n 的一些 Java 标准库有一个共同的祖先,所以 C/C++ 版本希望你很容易理解。

    【讨论】:

    • 对于如此简单的事情,我对向我的应用程序添加额外的库依赖项感到复杂。正如我所看到的,检索我的角色的某种字符代码应该很容易,然后根据 Unicode 标准中定义的某些代码范围对其进行测试——我错了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多