将ä,ö,ü重命名为ae,oe,ue

时间:2015-03-09 14:00:18

标签: java diacritics

我们希望重命名字符串,使得像德语变音符号这样的“奇怪”字符被翻译成官方的非变音符号。在Java中,是否有一些函数可以转换这些字符(AKA处理映射),不仅适用于德语变音符号,还适用于法语,捷克语或斯堪的纳维亚语字符?原因是创建一个可以重命名文件/目录的函数,Subversion可以在不同平台上无问题地处理这些文件/目录。

This question类似但没有有用的答案。

3 个答案:

答案 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国际组件的任何语言下工作。