UTF-8 - ISO 8859-1映射工具

时间:2013-05-15 14:55:14

标签: java character-encoding

当我使用8859-1到8859-1中未知的字符转换UTF-8字符串时,我会在这里和那里得到问号。当然,他还能做什么!

是否有一个java工具可以将像“İKEA”这样的字符串映射到“IKEA”并避免使用?如何充分利用它?

1 个答案:

答案 0 :(得分:1)

对于具体示例,您可以:

  • 使用Unicode normalization
  • 的兼容性分解字母和变音符号
  • 指示encoder删除不支持的字符(变音符号)

示例:

ByteArrayOutputStream out = new ByteArrayOutputStream();
// create encoder
CharsetEncoder encoder = StandardCharsets.ISO_8859_1.newEncoder();
encoder.onUnmappableCharacter(CodingErrorAction.IGNORE);
// write data
String ikea = "\u0130KEA";
String decomposed = Normalizer.normalize(ikea, Form.NFKD);
CharBuffer cbuf = CharBuffer.wrap(decomposed);
ByteBuffer bbuf = encoder.encode(cbuf);
out.write(bbuf.array());
// verify
String decoded = new String(out.toByteArray(), StandardCharsets.ISO_8859_1);
System.out.println(decoded);

您仍然会从定义109,384个值(Unicode 6)的字符集转码为支持256的字符集,因此始终存在限制。

还要考虑更复杂的转换API,例如ICU,以获得音译等功能。