如何使用 javascript 解码 rfc2047 编码的字符串?
Posted
技术标签:
【中文标题】如何使用 javascript 解码 rfc2047 编码的字符串?【英文标题】:How can I decode a rfc2047 encoded string using javascript? 【发布时间】:2021-08-25 06:58:45 【问题描述】:我有一个返回的服务,例如.jpg 文件。它的名称在 Content-Disposition 标头中,但文件名以 rfc2047 标准编码,所以我有:
filename="=?UTF-8?Q?=C4=99=C5=9B.jpg?=" => decoded to = ęś.jpg
我发现 Java 中有 MimeUtility.decodeText
效果很好,但我需要使用 Angular 8 在客户端站点上解码此文本。我尝试使用 Java 在服务器站点上解码此文本并将其传递给客户端站点然后用decodeURIComponent(escape(filename))
解码,还是不行。
在 Angular 8 中是否有任何等效的函数或 npm 依赖项来对其进行解码?
【问题讨论】:
【参考方案1】:如果您可以在服务器端执行解码,则执行此操作,然后使用 JS 可以本地解码的东西对其进行编码。
例如,您可以发送 URL 编码(百分比编码)字符串,在您的示例中为 %C4%99%C5%9B.jpg
,然后使用 decodeURIComponent()
对其进行解码(请注意,您不应像在您的问题)。
Base64 不起作用,因为 JS 内置方法 (atob
) 需要额外的工作来解码这些字符 (https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa#unicode_strings)
或者,如果您正在寻找 npm 模块,这里有一个支持直接解析值的模块:https://www.npmjs.com/package/content-disposition
【讨论】:
与此同时,我创建了一些解决方法。首先,我在服务器站点上使用MimeUtility.decodeText
解码此名称,然后使用URLEncoder.encode(decodeText, StandardCharsets.UTF_8.name())
对其进行编码。在客户端站点上,我只是使用decodeURIComponent
解码此文本。在阅读您的答案之前,我已经这样做了。我能看到什么我做了你在第一段中的建议。谢谢你的回答。以上是关于如何使用 javascript 解码 rfc2047 编码的字符串?的主要内容,如果未能解决你的问题,请参考以下文章
HTTP OPTIONS 请求可以返回 204 还是应该始终返回 200?
使用泛型/可编码 w/ API 响应 204 NO CONTENT
如何使用 java 对从 javascript 到 servletpage 的查询字符串进行编码和解码?
The valid characters are defined in RFC 7230 and RFC 3986错误解决方式