gpt4 book ai didi

java - 使用 NIO 缓冲区编码 UTF-8 时是否存在错误?

转载 作者:行者123 更新时间:2023-12-01 05:24:35 26 4
gpt4 key购买 nike

好的,你们能告诉我当前代码中是否存在某个错误:

//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 编码并由 9 组成 - 符号在 ANCII(U+007F) 范围内代码,10 是复杂 UTF-8 字符 (U+7FFFFFFF) 的第一位,因此接下来的 5 字节该符号将仅存在于下一个缓冲区中。因此最后一个字符将被编码错误或丢失。我是对的以及如何解决这个问题?通过修复我的意思是解码单独的 nio 缓冲区,而不仅仅是在获取所有缓冲区后解码整个字节序列。

最佳答案

你这里有很多问题。其中之一是您可能没有读取整个编码字符。通常,在尝试解码消息之前,您需要有一些方法来确定已到达消息末尾,例如消息长度或换行符。

顺便说一句:最大可能的代码点是 U+10FFFF。最大的 char 值为 U+FFFF

关于java - 使用 NIO 缓冲区编码 UTF-8 时是否存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9860206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com