Replacement of URLDecoder



对不起,我重新编辑了一遍问题,使它更清楚。

如果存在名为abc你好+的文件名。

当这个文件名在Content-Disposition报头中作为abc%E4%BD%A0%E5%A5%BD+时。

我解码abc%E4%BD%A0%E5%A5%BD+通过java.net.URLDecoder.decode(),但它变成了abc你好,加号被空格取代,因此文件名不是原来的一个。

我想知道是否有内置的方法或其他第三方软件包来解码和避免加号模式成为空间。因为我只想解码百分比编码的字符串。谢谢你。

如果您正在讨论解析Content-Disposition头,它看起来像这里,例如:

Content-Disposition: attachment; filename="file+name.txt"; 

则不需要使用url编码解码引号中所写的内容。引号内的内容将是正确的文件名,而不需要编码。因此,加号代表一个实际的加号。如果它是一个空格,标题看起来像这样:

Content-Disposition: attachment; filename="file name.txt"; 

查看更多背后的理论:

这个RFC 6266, section 4.1指定了Content-Disposition头文件应该如何格式化。它们粗略地提到文件名只是"原样"。并且没有编码,但是他们也提到了编码的细节可以在rfc 2616, Section 3.6中找到,但是这一节并没有真正详细说明具体的编码。

所以我的建议是:假设filename参数是正确的。除非您希望处理包含非ascii字符的文件名。在这种情况下,还可以在上述两个rfc中找到详细信息。

URL中的+表示空格。如果你想让+表示+,那就太奇怪了,没有工具可以做到这一点,因为这不是URL解码的意思。请注意,URL中的+%20是相同的,并且都转换为空格,按照规范。如果您希望+保持+,但%20转换为空格,则必须编写自己的URL解码器。如果你不关心%20,你可以取url解码器给你的字符串,然后调用.replace(" ", "+")

最新更新