Apache commons的URLCodec解码数据并用问号替换字符(?)

时间:2013-02-14 06:15:49

标签: java urlencode apache-commons apache-commons-net

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

这个问题有解决方法吗?

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

String decodingData = new URLCodec()。decode(data,“ISO-8859-1”);

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

String decodingData = new URLCodec()。decode(data,“UTF-8”);

1 个答案:

答案 0 :(得分:2)

根据文档,解码功能是接收标准URL,并对其中的值进行解码。 www-form-urlencoded编码值只能包含指定的ASCII值集。

您的问题表明您提交的网址值不在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

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