【发布时间】:2017-05-19 05:07:51
【问题描述】:
我正在编写一个服务器程序,我正在从网络套接字读取 UTF-8 编码的字节流并不断解释这些字符。
对于需要多个字节来表示的字符,有时我只是在套接字上接收到字符的第一个字节,然后程序将此字节解释为无效字符。
例如,客户端运行以下代码:-
String s = "Cañ";
byte[] b = s.getBytes("UTF-8");
//sending first three bytes
send(b, 0, 3)); //send(byte[], offset, length)
//sending last byte
send(b, 3, 1);
当服务器接收到前三个字节时,它会将它们解码为 Ca?。
如何检测服务器上的字符边界?
给出的代码是为了产生问题而编造的。我相信这个字符有时会被 TCP 破坏。
【问题讨论】:
-
服务器究竟是如何“接收”字节的?在读取字符数据时,您不应该尝试读取原始的
InputStream,而是将其包装在知道字符和 UTF-8 等内容的InputStreamReader中
标签: java sockets unicode utf-8