Sid*_*Sid 7 java string bytearray
我正在研究代理服务器.我正在获取数据byte[],我将其转换为String执行某些操作.现在当我将这个新的转换String回byte[]它时会导致未知问题.
所以主要是因为我需要知道如何正确地将a转换byte[]为a String然后再转换为a byte[].
我试图将转换byte[]为String然后再转换回来byte[](以确保它不是我的操作导致问题).
所以它就像:
// where reply is a byte[]
String str= new String(reply,0, bytesRead);
streamToClient.write(str.getBytes(), 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)
不等于
streamToClient.write(reply, 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)
我的代理工作正常,当我发送byte[]没有任何转换,但当我将其转换byte[]为a String然后回到byte[]它导致问题.
有人可以帮忙吗?=]
最好的方式来转换byte[]到String和回一个byte[]是不要做它.
如果你有,你必须知道这是用于生产的编码byte[],否则操作使用平台的默认编码,可能会破坏数据,因为不是所有的编码可以编码所有可能的字符串,而不是所有可能的字节序列是合法的所有的编码.这就是你的情况.
至于如何找出编码,这取决于:
<meta http-equiv>标题如果没有办法找出编码,你有随机垃圾,而不是文本数据.
您将需要知道所使用的字符编码,使用该编码解码字节并使用相同的字符编码重新编码。例如:
String str = new String(reply, 0, Charset.forName("UTF-8"));
bytes[] out = str.getBytes(Charset.forName("UTF-8"));
streamToClient.write(bytes, 0, bytes.length);
Run Code Online (Sandbox Code Playgroud)
如果未指定,Java 将使用默认字符编码,通常为 UTF-8(甚至可能强制如此),但 HTML 通常会是其他编码。我怀疑那是你的问题。
| 归档时间: |
|
| 查看次数: |
4511 次 |
| 最近记录: |