gpt4 book ai didi

java - 将 byte[] 编码为 String

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:39:48 24 4
gpt4 key购买 nike

嘿嘿,

我想将字节数据(可以是任何内容)转换为字符串。我的问题是,例如使用 UTF-8 对字节数据进行编码是否“安全”:

String s1 = new String(data, "UTF-8");

或使用 base64:

String s2 = Base64.encodeToString(data, false); //migbase64

我只是担心使用第一种方法会产生负面影响。我的意思是两种变体都可以工作 p̶e̶r̶f̶e̶c̶t̶l̶y̶ ,但是 s1 可以包含 UTF-8 字符集的任何字符,s2 仅使用“可读”字符。我只是不确定是否真的需要使用 base64。基本上我只需要创建一个 String 通过网络发送它并再次接收它。 (在我的情况下没有其他办法:/)

问题只是关于负面影响,而不是是否可能!

最佳答案

您应该绝对使用 base64 或十六进制。 (两者都可以;base64 更紧凑,但更难让人阅读。)

您声称“两种变体都能完美运行”,但事实并非如此。如果您使用第一种方法并且 data 实际上不是有效的 UTF-8 序列,您将丢失数据。您不是尝试将 UTF-8 编码的文本转换为 String,因此不要编写试图这样做的代码。

使用 ISO-8859-1 作为编码将保留所有数据 - 但在很多情况下,返回的字符串将不容易跨其他协议(protocol)传输。例如,它很可能包含不可打印的控制字符。

仅当您拥有固有的文本数据时才使用String(byte[], String) 构造函数,而您碰巧拥有编码形式的数据(其中编码被指定为第二个参数)。对于其他任何东西——例如音乐、视频、图像、加密或压缩数据——你应该使用一种将传入数据视为“任意二进制数据”并找到它的文本编码的方法......这正是 base64和十六进制。

关于java - 将 byte[] 编码为 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19894723/

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