gpt4 book ai didi

Java Base64 MIME 解码/编码会丢弃分隔符

转载 作者:行者123 更新时间:2023-12-02 12:56:11 24 4
gpt4 key购买 nike

我有一个 Base64 编码的字符串,看起来像 "data:image/png;base64,iVBORw0K"。我正在尝试将其解码回二进制,然后使用 java.util.Base64 再次将其编码为 Base64。奇怪的是,再次解码和编码后,我会丢失分隔符并返回 "dataimage/pngbase64iVBORw0I="

这就是我进行解码和编码的方式(用 Scala 编写,但你明白了):

import java.util.Base64

val b64mime = "data:image/png;base64,iVBORw0K"

val decoder = Base64.getMimeDecoder
val encoder = Base64.getMimeEncoder

println(encoder.encodeToString(decoder.decode(b64mime)))

这是一个示例:https://scalafiddle.io/sf/TJY7eeg/0

javax.xml.bind.DatatypeConverter 也会发生这种情况。我究竟做错了什么?这是预期的行为吗?

最佳答案

您尝试处理的字符串看起来像 RFC 2397 中指定的“data:”URL 示例。

处理其中之一的正确方法是将其解析为其组件,然后仅解码 Base64 编码的组件。这是语法

   dataurl    := "data:" [ mediatype ] [ ";base64" ] "," data
mediatype := [ type "/" subtype ] *( ";" parameter )
data := *urlchar
parameter := attribute "=" value

因此,这表示示例中逗号之前的所有内容都是非 Base64 数据。您不能简单地将整个字符串视为 Base64,因为它包含在 Base64 编码方案的任何标准变体中都无效的字符。

此问答讨论了 Java 中的 RFC 2397 解析器:

关于Java Base64 MIME 解码/编码会丢弃分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44433963/

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