当我使用8859-1到8859-1中未知的字符转换UTF-8字符串时,我会在这里和那里得到问号。当然,他还能做什么!
是否有一个java工具可以将像“İKEA”这样的字符串映射到“IKEA”并避免使用?如何充分利用它?
答案 0 :(得分:1)
对于具体示例,您可以:
示例:
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,以获得音译等功能。