如何在 Java 中规范化/非重音文本?我目前正在使用 java.text.Normalizer:
Normalizer.normalize(str, Normalizer.Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
但它远非完美。例如,它使挪威字符 æ 和 ø 保持不变。有谁知道替代方案?我正在寻找可以将各种语言中的字符转换为 az 范围的东西。我意识到有不同的方法可以做到这一点(例如应该将æ编码为'a','e'甚至'ae'?)并且我愿意接受任何解决方案。我宁愿自己不写东西,因为我认为我不太可能在所有语言中都能做到这一点。性能并不重要。
用例:我想将用户输入的名称转换为纯 az 范围名称。转换后的名称将显示给用户,所以我希望它尽可能接近用户用他的原始语言写的内容。
编辑:
好的人们,谢谢你否定了这个帖子而不是解决我的问题,耶!:) 也许我应该忽略用例。但请允许我澄清一下。我需要转换名称以便在内部存储它。我无法控制此处允许的字母选择。该名称将在例如 URL 中对用户可见。与您在此论坛上的用户名标准化并在您单击您的姓名时在 URL 中显示给您的方式相同。该论坛将“Băşan”之类的名称转换为“baan”,将“Øyvind”之类的名称转换为“yvind”。我相信它可以做得更好。我正在寻找想法,最好是一个库函数来为我做这件事。我知道我做错了,我知道“o”和“ø”是不同的,等等,但是如果我的名字是“Øyvind”并且我在在线论坛上注册,我可能更喜欢我的用户名是“ oyvind”而不是“yvind”。希望这有任何意义!谢谢!
(不,我们不允许用户选择他自己的用户名。我真的只是在寻找 java.text.Normalizer 的替代品。谢谢!)