如何将Unicode简化为ASCII?

时间:2019-03-24 22:10:42

标签: java unicode character-encoding

给出名称为的Unicode字符串

"Guns N’ Roses, 2 × 4, Rust in Peace… Polaris, Black No. 1 (Little Miss Scare‐All), À Tout Le Monde"

每个名称都包含一些非ASCII字符(',','×','...','-','À'),我正在寻找一种算法来简化它

"Guns N' Roses, 2 x 4, Rust in Peace... Polaris, Black No. 1 (Little Miss Scare-All), A Tout Le Monde"

其中的每个非ASCII字符都已被ASCII替代物替换。

我知道我可以通过这样做处理一整类字符(包括'À')

Normalizer.normalize(value, Form.NFD).replaceAll("[^\\p{ASCII}]", "");

当然,我可以使用许多手工制作的.replaceAll()来处理其他任何字符。但是我想知道是否有一些标准算法不需要枚举我要替换的所有剩余字符。我想做什么甚至有个名字?

1 个答案:

答案 0 :(得分:0)

如果你想要一个通用的解决方案,StringUtils.stripAccents 规则在这里。但是,带重音的字母不会变成有向合字母(如 oeae)。还有一些在 ASCII 中不存在但没有重音符号的字符,例如德语 ß 必须在之后一一处理,最好通过链接的本机 replace()replaceAll() String.class 方法。

可能与 Is there a way to get rid of accents and convert a whole string to regular letters? 重复

示例:

żółtość wszędzie, łatwo wątpić w zieloność ówczesnego świata (Polish); école publique et laïque a fait de la orthographe strictement normalisée, sinon sa principale règle (French); eine große Online-Umfrage in  mittleren Großstädten zeigt, wo Fußgänger und ÖPNV-Nutzer zufrieden sind (German)

结果

zołtosc wszedzie, łatwo watpic w zielonosc owczesnego swiata (Polish); ecole publique et laique a fait de la orthographe strictement normalisee, sinon sa principale regle (French); eine große Online-Umfrage in  mittleren Großstadten zeigt, wo Fußganger und OPNV-Nutzer zufrieden sind (German)