我理解在使用适当的格式(例如hex,base64等)将Java中的byte []转换为String时需要指定编码,因为默认编码在不同平台中可能不相同。但在将字符串转换为字节时,我不确定我是否理解相同内容。所以这个问题就是围绕在网上传输字符串时需要指定字符集的概念。
考虑一下。 Java中的代码
注意:下面的示例中的String不是从文件读取的,而是另一个资源,它是在
中创建的1:String message ="一条好消息&#34 ;;
2:byte [] encryptedMsgBytes = encrypt(key ,, message.getBytes());
3:String base64EncodedMessage = new String(Base64.encodeBase64(encryptedMsgBytes));
我需要使用Http Post& amp;将收到&在另一端处理(解密,从base64等转换)。
根据阅读文章,建议的做法是使用.getBytes(" utf-8") 在第2行,即message.getBytes(" UTF-8")
&安培;建议在另一端使用类似的方法处理数据,如下面第7行所示
4:String base64EncodedMsg =
5:byte [] base64EncodedMsgBytes = Base64.encodeBase64(base64EncodedMsg));
6:byte [] decryptedMsgBytes = decrypt(aesKey," AES",Base64.decodeBase64(base64EncodedMessage);
7:String originalMsg = new String(decryptedMsgBytes," UTF-8");
鉴于Java的内部内存中字符串表示形式为utf-16。 (不包括:序列化和文件保存期间的UTF8),如果解密也是用Java完成的,我们真的需要这个吗(注意:这不是一个实际的假设,只是为了讨论才能理解需要提及编码)?因为,在JVM中,String'消息'第1行使用UTF-16表示,不指定编码的.getBytes()方法总是返回UTF-16字节?或者是不正确的.getBytes()方法而不指定编码总是返回原始字节?由于内部表示是UTF-16,为什么特定JVM上的默认字符编码很重要?
如果它确实返回UTF-16,那么是否需要在另一端使用新的String(decryptedMsgBytes," UTF-8")?
答案 0 :(得分:1)
在没有指定编码的情况下不会使用.getBytes()方法 总是返回UTF-16字节?
这是不正确的。请参阅JavaDoc
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#getBytes()