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

Rename ä, ö, ü to ae, oe, ue

我们希望重命名字符串,以便将 "strange" 字符(如德语变音符号)转换为其官方的非变音符号表示形式。在 Java 中,是否有一些函数可以转换此类字符(也就是处理映射),不仅适用于德语变音符号,还适用于法语、捷克语或斯堪的纳维亚语字符?原因是创建一个可以重命名 files/directories 的函数,Subversion 可以在不同平台上毫无问题地处理它。

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

您可以使用 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 等等。但也许这对你来说也没有问题。

使用 ICU Transliterator。它是执行此类音译的通用 class。您可能需要提供自己的地图。

答案是Any-Latin; De-ASCII; Latin-ASCII;

PHP 使用 Transliterator 的具体答案(很抱歉没有提供 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 国际组件的任何语言。