重命名,是的,是的,是的,是的

问题描述 投票:1回答:3

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

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

java diacritics
3个回答
2
投票

您可以使用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等等。但也许这对你也没关系。


3
投票

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


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

© www.soinside.com 2019 - 2024. All rights reserved.