gpt4 book ai didi

java - 在 Java 的 getBytes 中指定编码的重要性

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

我理解在使用适当的格式(即十六进制、base64 等)将字节 [] 转换为 Java 中的字符串时需要指定编码,因为不同平台的默认编码可能不同。但是我不确定在将字符串转换为字节时我是否理解相同。所以这个问题是围绕在通过网络传输字符串时需要指定字符集的概念进行思考。

考虑跟随。 Java代码

注意:下面示例中的字符串不是从文件中读取的,而是从另一个资源中创建的。

1: String message = "一条好消息";

2: byte[] encryptedMsgBytes = encrypt(key,,message.getBytes());

3: String base64EncodedMessage = new String (Base64.encodeBase64(encryptedMsgBytes));

我需要使用 Http Post 通过 Web 发送它,另一端将接收和处理(解密、从 base64 转换等)。

根据阅读文章,推荐的做法是使用 .getBytes("utf-8")在第 2 行,即 message.getBytes("UTF-8")

&建议在另一端使用类似的方法来处理数据,如下面第 7 行所示

4: 字符串 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 中,第 1 行的字符串“消息”是使用 UTF-16 表示的,所以没有指定编码的 .getBytes() 方法不会总是返回 UTF-16 字节吗?还是那个不正确的 .getBytes() 方法没有指定编码总是返回原始字节?由于内部表示是 UTF-16,为什么特定 JVM 上的默认字符编码很重要?

如果它确实返回 UTF-16,那么是否需要在另一端使用 new String(decryptedMsgBytes, "UTF-8") ?

最佳答案

wouldn't the .getBytes() method without specifying the encodingalways return the UTF-16 bytes ?

这是不正确的。根据 Javadoc ,这使用平台的默认字符集:

Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array.

关于java - 在 Java 的 getBytes 中指定编码的重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31105976/

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