0

我正在寻找一种将 Unicode UTF-32 (int) 转换为小写的方法。在 Java 中,像这样的东西可以解决问题:

Character.toChars(Character.toLowerCase(Character.codePointAt(text, i)))

我有来自 Char.ConvertToUtf32 的 UTF-32,但似乎没有办法将该值小写。

更新:我正在处理一个字符流/数组,我通过查找 hi 代理找到了代码点,有点类似于上面的 Java snipit。来回转换为字符串将是低效的。

4

1 回答 1

0

执行此操作的唯一内置方法是将 UTF-32 转换为字符串。像下面这样的东西应该可以工作:

static Int32 ToLower(Int32 c)
{
    // Convert UTF-32 character to a UTF-16 String.
    var strC = Char.ConvertFromUtf32(c);

    // Casing rules depends on the culture.
    // Consider using ToLowerInvariant().
    var lower = strC.ToLower();

    // Convert the UTF-16 String back to UTF-32 character and return it.
    return Char.ConvertToUtf32(lower, 0);
}

您表示这对您的需求效率低下。你做过基准测试吗?

如果您仍然坚持在 UTF-32 上进行大小写,那么您将需要自己动手。幸运的是,Unicode 联盟已经完成了大部分艰苦的工作。看看 Unicode大小写折叠文件。解析此文件,以适当的结构存储数据。然后,可以使用您喜欢的任何格式的数据直接对它进行套管。

于 2012-01-11T07:15:26.000 回答