我在使用Apache commons的URLCodec解码像'1º'这样的数据时面临一个问题。它被解码为'1?'。
这个问题有解决方法吗?
在我尝试使用以下代码之前:
String decodingData = new URLCodec()。decode(data,“ISO-8859-1”);
我也试过使用下面的代码。但它没有帮助。
String decodingData = new URLCodec()。decode(data,“UTF-8”);
答案 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
如果你采用编码形式,并通过解码器,你应该得到未编码的表格。但是,没有定义当您使用未编码的版本时会发生什么,并尝试对其进行解码。由于未定义,实际实施和实际结果可能会有所不同。它可能应该将异常作为无效编码抛出,但这也不能保证。