当我用8859-1中不知道的字符将utf-8字符串转换为8859-1时,我会在这里和那里得到问号。当然他还能做什么!
有没有Java工具可以将“_kea”这样的字符串映射到“Ikea”并避免?好好利用它?
最佳答案
对于特定示例,您可以:
使用unicodenormalizationcompatibility form分解字母和变音符号
指示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);
您仍在从定义109384个值(Unicode 6)的字符集转码到支持256的字符集,因此始终存在限制。
还可以考虑一个更复杂的转换api,比如ICU来处理诸如音译之类的特性。
关于java - UTF-8-ISO 8859-1映射工具,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16568399/