在Java中

时间:2015-06-28 23:48:18

标签: java string character-encoding byte

我理解在使用适当的格式(例如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")?

1 个答案:

答案 0 :(得分:1)

  

在没有指定编码的情况下不会使用.getBytes()方法   总是返回UTF-16字节?

这是不正确的。请参阅JavaDoc

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#getBytes()