0

我在使用 Apache commons 的 URLCodec 解码像“1º”这样的数据时面临一个问题。它被解码为“1?”。

这个问题有什么解决办法吗?

在我尝试使用以下代码之前:

String decodedData = new URLCodec().decode(data, "ISO-8859-1");

我也尝试过使用下面的代码。但这没有帮助。

String decodedData = new URLCodec().decode(data, "UTF-8");

4

1 回答 1

2

根据文档,解码功能是接收标准 URL,并从中解码出值。www-form-urlencoded 编码值中只能有一组指定的 ASCII 值。

您的问题表明您提交的 URL 值的字符不在 www-form-urlencoded 的有效范围内。

那么答案是:我相信您正在尝试解码一个未正确 www-form-urlencoded 的值,这就是您的问题的根源。

您给出的值:1º,它是一个数字 1,后跟一个“阳性序数指示符”(假设在编辑此 StackOverflow 条目时没有任何失真)。阳性序数指标是十进制值 186,即十六进制值 00BA。

假设您从该值作为未编码数据开始,那么这两个字符序列的 www-form-urlencoded 值将取决于您使用的是 UTF-8 还是 ISO-8859-1。以下是每个的编码版本:

unencoded value:                           1º
www-form-urlencoded using ISO-8859-1 is:   1%BA
www-form-urlencoded using UTF-8 is:        1%C2%BA

如果您采用编码形式,并将其通过解码器,您应该得到未编码的形式。但是,当您使用未编码的版本并尝试对其进行解码时,没有定义会发生什么。由于未定义,实际实现和实际结果可能会有所不同。它可能应该将异常作为无效编码抛出,但这也不能保证。

于 2013-02-14T07:48:28.257 回答