来自Java

时间:2017-03-29 21:37:35

标签: java android encoding

我正在尝试编码一个URL参数。

例如,当我编码

  

qOddENxeLxL + 13drGKYUgA == \ n

使用URL Encoder tool

它提供以下输出,当我请求API

  

qOddENxeLxL%2B13drGKYUgA%3D%3D%5CN

但是当我使用URLEncoder.encode("qOddENxeLxL+13drGKYUgA==\n", "UTF-8");

从我的Java代码(Android)编码URL时

它给了我以下结果

  

qOddENxeLxL%252B13drGKYUgA%253D 253D%%250A

我也尝试过使用其他编码方案,但无法产生相同的结果。

3 个答案:

答案 0 :(得分:1)

问题是因为\n被解释为换行符。 Java会将字符串中的\视为开始escape sequence。 您必须转义它才能获得与您提供的URL相同的内容。

System.out.println(URLEncoder.encode("qOddENxeLxL+13drGKYUgA==\\n", "UTF-8"));

这将提供相同的结果:

qOddENxeLxL%2B13drGKYUgA%3D%3D%5Cn

答案 1 :(得分:1)

问题是你正在向{0}提供URLEncoder工具,它不会将它理解为一个转义序列,因此给你\n,并在字符串里面给Java编译器文字,它确实理解它,因此给你%5Cn

答案 2 :(得分:-1)

想出了问题,这里字符串被编码了两次。

在将参数传递给Retrofit调用时,它会通过改造自动编码,我将编码参数传递给改造,以便再次编码。

顺便说一句,谢谢你的解释。 :)