java - 如何将(某些)Unicode 简化为 ASCII?
问题描述
给定一个名称的 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()
. 但我想知道是否有一些标准算法不需要枚举我想要替换的所有剩余字符。我想做的事有名字吗?
解决方案
如果你想要一个通用的解决方案,这里的StringUtils.stripAccents规则。但是,重音字母不会变成二合字母(如oe或ae)。还有一些 ASCII 中不存在但没有重音字符的字符,例如德语 ß 必须在事后一一处理,最好是通过链式本地replace()
或replaceAll()
String.class
方法。
可能重复是否有办法摆脱重音符号并将整个字符串转换为常规字母?
例子:
żół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)
推荐阅读
- ios - 如何自定义 UICollectionView 在水平方向左对齐
- javascript - 如何修复此错误以及如何正确编写我的 github 用户名?是有美元符号还是没有?
- azure - 来自 Azure Front Foor 剥离路径的 Azure Appservice 简单身份验证代理
- c# - 有没有比客户端控制台应用程序中的 ClientWebSocket 更好的方式从 websocket 服务器接收数据?
- web - 如何通过 Odoo 网站中的表单获取用户给出的数字
- angular - 错误:node_modules/@angular/material/core/common-behaviors/constructor.d.ts:14:64 - 错误 TS1005: ';' 预期的
- php - 从第三方网站 POST 后丢失会话数据
- android - 共享偏好总是在改造拦截器中获得旧值
- javascript - React Redux 刷新令牌
- python - PyCharm,Discord 机器人没有看到任何变化