我正在寻找一种将Unicode UTF-32 (int)转换为小写的方法。在Java中,类似下面这样的代码就可以完成这个任务:
Character.toChars(Character.toLowerCase(Character.codePointAt(text, i)))我有来自Char.ConvertToUtf32的UTF-32,但似乎没有办法降低这个值。
更新:我正在处理一个字符流/数组,我已经通过查找hi代理找到了代码点,有点类似于上面的Java代码片段。来回转换为字符串将是低效的。
发布于 2012-01-11 15:15:26
唯一的内置方法是将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 Consortium已经完成了大部分艰苦的工作。看一下Unicode case folding file。解析该文件,并以适当的结构存储数据。然后,可以用您喜欢的任何格式的数据直接对其进行大小写。
https://stackoverflow.com/questions/4559128
复制相似问题