0
玉傢伙,你能告訴我是有一定的缺陷在當前代碼:使用NIO緩衝區對UTF-8進行編碼時是否存在錯誤?
//this all only for example so DO NOT use this terrible code
1 private void readIncomingData(SocketChannel channel){
2 try{ //10 - for simplicity sake
4 ByteBuffer buffer = ByteBuffer.allocate(10);
5 buffer.clear();
6 channel.read(buffer);
8 StringBuilder response = new StringBuilder();
9 buffer.flip();
10 Charset charset = Charset.forName(「UTF-8″);
12 //HERE IS THE DILEMMA !!!
13 response.append(charset.decode(buffer));
14 // Output the response
15 System.out.println(「Data read from client 」 + response);
16 } catch (IOException e) {
17 e.printStackTrace();
18 }
19}
例如輸入文本UTF-8編碼,包括 - 符號是在範圍ANCII(U + 007F)的 碼和10S是複雜UTF-8字符(U + 7FFFFFFF)的第一個比特所以接下來字節 這個符號將只在下一個緩衝區中。所以最後一個字符將被錯誤編碼或被錯過。 我是否正確以及如何解決此問題? 通過修復我的意思是解碼單獨的nio緩衝區,而不僅僅是獲取所有緩衝區後的整個字節序列。
謝謝彼得,現在很清楚。 – 2012-03-25 13:20:11
我發現有關這類問題的好文章,如果有人感興趣 - [鏈接](http://illegalargumentexception.blogspot.com/2009/05/java-rough-guide-to-character-encoding.html#javaencoding%5Fstringclass ),頭文件「使用String類進行編碼和解碼的潛在缺陷」也參見「BOM」使用 – 2012-03-27 14:23:36