3
當我將8859-1中未知的字符轉換爲UTF-8字符串到8859-1時,我在這裏和那裏都會出現問號。當然,他還能做什麼呢!UTF-8 - ISO 8859-1映射工具
是否有一個Java工具可以將「IKEA」這樣的字符串映射到「IKEA」並避免?爲了讓它變得更好?
當我將8859-1中未知的字符轉換爲UTF-8字符串到8859-1時,我在這裏和那裏都會出現問號。當然,他還能做什麼呢!UTF-8 - ISO 8859-1映射工具
是否有一個Java工具可以將「IKEA」這樣的字符串映射到「IKEA」並避免?爲了讓它變得更好?
對於具體的例子,可以:
實施例:
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用於音譯等功能。
http://stackoverflow.com/questions/285228/how-to-convert-utf-8-to-us-ascii-in-java – kodmanyagha
@Hasan對不起,我錯誤地投票結束後,重新閱讀upvoted你的題。 – stacker
這個問題不是重複!建議的解決方案僅適用於US-ASCII,但iso8859-1還包含幾個字母,如ÄÜÜ應區別於İ(包含在utf-8中,但不包含在iso8859-1中) – stacker