我们有一个系统,客户,主要是欧洲输入文本(UTF-8),必须分发到不同的系统,大多数接受UTF-8,但现在我们还必须将文本分发给只接受美国的美国系统. -Ascii 7位
所以现在我们需要将所有欧洲字符翻译成最近的US-Ascii.是否有任何Java库可以帮助完成此任务?
现在我们刚刚开始添加到翻译表,其中Å(瑞典AA) - > A等等,如果我们找不到输入字符的任何匹配项,我们将记录并替换为问号并试着为下一个版本修复它,但它似乎非常低效,而其他人必须先做过类似的事情.
Sim*_*hke 37
您可以使用以下内容执行此操作(来自此Core Java技术技巧提示中的NFD示例):
public static String decompose(String s) {
return java.text.Normalizer.normalize(s, java.text.Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+","");
}
Run Code Online (Sandbox Code Playgroud)
您可以将文本转换为规范化形式D,而不是创建自己的表格,其中字符表示为基本字符加变音符号(例如,"á"将替换为"a",后跟组合锐化重音).然后,您可以删除不是ASCII字母的所有内容.
这些表仍然存在,但现在是Unicode标准中的表.
您也可以尝试NFKD而不是NFD,以捕获更多案例.
参考文献:
小智 5
针对Joe Liversedge给出的答案,引用的Lucene ISOLatin1AccentFilter 不再存在:
它已被org.apache.lucene.analysis.ASCIIFoldingFilter取代:
此类将不在前127个ASCII字符("Basic Latin"Unicode块)中的字母,数字和符号Unicode字符转换为ASCII等效字符(如果存在).转换以下Unicode块中的字符; 但是,只转换那些具有合理ASCII替代字符的字符.
仅供参考 -
| 归档时间: |
|
| 查看次数: |
54415 次 |
| 最近记录: |