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

2022-09-01 15:22:57

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

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

现在我们刚刚开始添加到翻译表中,其中Å(瑞典语AA)->A等,并且我们找不到任何与输入的字符匹配的字符,我们将记录它并用问号替换并尝试在下一个版本中修复它,但它似乎非常低效,其他人以前一定做过类似的事情。


答案 1

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

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

答案 2

uni2ascii程序是用C语言编写的,但你可以毫不费力地将其转换为Java。它包含一个大型的近似值表(隐式地,在 switch-case 语句中)。

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


推荐