将字节数组转换为字符串时格式更改

发布于 2024-11-15 17:29:34 字数 666 浏览 3 评论 0原文

参考这篇文章为什么将字节数组转换为字符串然后再转换回字节数组时长度不同?

我知道通过这样做更改包含二进制数据的字节数组

 String s = new String(bytes);

可能会导致二进制格式改变数据要改变,因为它创建了一个使用默认编码的字符串,可能会将某些二进制字符转换为未知字符,例如“?”如果将其转换回字节数组,则会出错。

目前,我在 ByteArrayInputStream 中有一个 mime,因为 mime in mime 看起来像这样

--boundary
//content type, id, etc...
//empty line
//Binary Data
--boundary--

如果我无法首先将字节数组转换为字符串,如何从输入流中提取二进制数据并将其转换为 Base64?我正在考虑使用边界来分割从 Bytearrayinputstream 转换而来的 Sting,但这样做会在我想将其编码为 Base64 之前弄乱二进制数据。

With reference to this post Why are the lengths different when converting a byte array to a String and then back to a byte array?

I understand that changing a byte array containing binary data by doing this

 String s = new String(bytes);

might cause the format of the binary data to change because it creates a string using the default encoding which may convert certain binary characters to unknown characters like "?" and if you convert it back to a byte array it will be wrong.

Currently I have a mime in a ByteArrayInputStream due to mime in mime which looks like this

--boundary
//content type, id, etc...
//empty line
//Binary Data
--boundary--

How do extract the Binary data from the Inputstream and convert it to Base64 if I cannot convert the byte array to a string in the first place? I was thinking of using the boundary to split the Sting converted from the Bytearrayinputstream, but doing so will mess up the Binary data even before I want to encode it to Base64.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

埋葬我深情 2024-11-22 17:29:34

您知道字节中间有一个“空行”(假设 0x13 或 0x10 字节值),因此只需查找该字节即可对原始字节数组进行分区。第一部分可以简单地映射到字符串,对于二进制数据,您现在拥有偏移量、长度和字节数据,这就是您所需要的。

You know you have an "empty line" in middle of the bytes (assuming 0x13 or 0x10 byte value), so just seek that byte and you can partition the original byte array. The first part can be simply mapped to String and for the binary data, you now have offset, length, and byte data and that is all you need.

辞别 2024-11-22 17:29:34

如果您在二进制数据中提供正确的字符串编码,则可以安全地将二进制转换为字符串!如果您知道您的二进制文件包含 ISO8859-1 中的字符串,那么就这样做

new String(byteArray,"ISO8859-1") 

,不会丢失任何内容。供您参考:Base64 编码字符串仅包含 ASCII 字符,这在 UTF-8 以及所有典型的 Windows 和 ISO 编码中是相同的,因此您使用它们都不会有任何问题。

You can safely convert binary to a String if you present the correct encoding of the String in the binary data! If you know your binary contains a String in ISO8859-1, just do

new String(byteArray,"ISO8859-1") 

and nothing gets lost. And for your information: Base64-Encoded Strings only contains ASCII characters, which are the same in UTF-8 and all typical Windows- and ISO-Encodings, so you won't have any problems with either of them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文