我们希望重命名字符串,使得像德语变音符号这样的“奇怪”字符被翻译成官方的非变音符号。在Java中,是否有一些函数可以转换这些字符(AKA处理映射),不仅适用于德语变音符号,还适用于法语,捷克语或斯堪的纳维亚语字符?原因是创建一个可以重命名文件/目录的函数,Subversion可以在不同平台上无问题地处理这些文件/目录。
This question类似但没有有用的答案。
答案 0 :(得分:3)
使用ICU Transliterator。它是执行这些音译的通用类。您可能需要提供自己的地图。
答案 1 :(得分:1)
您可以使用Unicode块属性\p{InCombiningDiacriticalMarks}
从字符串中删除(大多数)变音符号:
public String normalize(String input) {
String output = Normalizer.normalize(input, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
return pattern.matcher(output).replaceAll("");
}
但这不会以你想要的方式取代德国变音符号。它会将ö
变为o
,将ä
变为a
,依此类推。但也许这对你也没关系。
答案 2 :(得分:0)
答案为Any-Latin; De-ASCII; Latin-ASCII;
使用Transliterator
的PHP特定答案(抱歉,未提供Java代码)
$val = 'BEGIN..Ä..Ö..Ü..ä..ö..ü..ẞ..ß..END';
echo Transliterator::create('Any-Latin; De-ASCII; Latin-ASCII;')->transliterate($val);
// output
// BEGIN..AE..OE..UE..ae..oe..ue..SS..ss..END
普通ASCII规则是Any-Latin; Latin-ASCII;
(BEGIN..A..O..U..a..o..u..SS..ss..END
)
规则应在支持ICU = Unicode国际组件的任何语言下工作。