当前位置:  开发笔记 > 编程语言 > 正文

如何在Java中将UTF-8转换为US-Ascii

如何解决《如何在Java中将UTF-8转换为US-Ascii》经验,为你挑选了4个好方法。

我们有一个系统,客户,主要是欧洲输入文本(UTF-8),必须分发到不同的系统,大多数接受UTF-8,但现在我们还必须将文本分发给只接受美国的美国系统. -Ascii 7位

所以现在我们需要将所有欧洲字符翻译成最近的US-Ascii.是否有任何Java库可以帮助完成此任务?

现在我们刚刚开始添加到翻译表,其中Å(瑞典AA) - > A等等,如果我们找不到输入字符的任何匹配项,我们将记录并替换为问号并试着为下一个版本修复它,但它似乎非常低效,而其他人必须先做过类似的事情.



1> Simon Liesch..:

您可以使用以下内容执行此操作(来自此Core Java技术技巧提示中的NFD示例):

public static String decompose(String s) {
    return java.text.Normalizer.normalize(s, java.text.Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+","");
}


注意:在scala中,这将是:def decompose(s:String):String = java.text.Normalizer.normalize(s,java.text.Normalizer.Form.NFD).replaceAll("\\ p {InCombiningDiacriticalMarks} +" ,"")

2> Jouni K. Sep..:

该uni2ascii程序是用C写的,但你可以把它毫不费力可能转换成Java.它包含一个近似的大表(隐含地,在switch-case语句中).

请注意,没有普遍接受的近似值:德国人希望你用AE取代Ä,芬兰人和瑞典人更喜欢A.你的例子Å也不明显:瑞典人可能会掉落戒指并使用A,但丹麦人和挪威人可能更喜欢历史上更正确的AA.


区域差异的优秀例子.

3> CesarB..:

您可以将文本转换为规范化形式D,而不是创建自己的表格,其中字符表示为基本字符加变音符号(例如,"á"将替换为"a",后跟组合锐化重音).然后,您可以删除不是ASCII字母的所有内容.

这些表仍然存在,但现在是Unicode标准中的表.

您也可以尝试NFKD而不是NFD,以捕获更多案例.

参考文献:

http://unicode.org/reports/tr15/

http://www.siao2.com/2005/02/19/376617.aspx

http://www.siao2.com/2007/05/14/2629747.aspx



4> 小智..:

针对Joe Liversedge给出的答案,引用的Lucene ISOLatin1AccentFilter 不再存在:

它已被org.apache.lucene.analysis.ASCIIFoldingFilter取代:

此类将不在前127个ASCII字符("Basic Latin"Unicode块)中的字母,数字和符号Unicode字符转换为ASCII等效字符(如果存在).转换以下Unicode块中的字符; 但是,只转换那些具有合理ASCII替代字符的字符.

仅供参考 -

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有