将扩展 Ascii (>127) 转换为标准 Ascii (<128) in Java

问题描述 投票:0回答:1

我们从第三方系统接收符合 UTF-8 标准的数据。我们的系统可以处理它,因为它也兼容 UTF-8。问题是旧的下游系统不能总是处理十进制值 > 127 的字符,并且会损坏或错误地显示数据。

由于我们无法控制下游系统,解决此问题的唯一方法是将“扩展”Ascii 字符转换为其“基本”字符(Ascii < 128) values e.g. ê, ë must become e, or ò, ö must become o, etc.

有没有一种方法可以在 Java 中实现此目的,而无需对映射进行硬编码?

java ascii
1个回答
0
投票

您可以使用 ICU4J

 中的 
Transliterator

假设输入仅包含拉丁字母,

Latin-ASCII
音译器可以删除拉丁字母中的变音符号。

System.out.println(Transliterator.getInstance("Latin-ASCII").transliterate("òóâì"));
// prints ooai

为了安全起见,您可能还想

replaceAll("\\P{IsLatin}", "")

如果您对输入有更多了解,例如它是用什么语言编写的,您可以使用专门针对该语言的音译器。例如,如果您知道文本是德语,则可以使用

de-ASCII
代替。这将使用德语特有的转换规则,例如将“ö”替换为“oe”。

有关您可以使用的其他音译器,请参阅 ICU 文档

© www.soinside.com 2019 - 2024. All rights reserved.