我正在尝试编码一个URL参数。
例如,当我编码
时qOddENxeLxL + 13drGKYUgA == \ n
它提供以下输出,当我请求API
时qOddENxeLxL%2B13drGKYUgA%3D%3D%5CN
但是当我使用URLEncoder.encode("qOddENxeLxL+13drGKYUgA==\n", "UTF-8");
它给了我以下结果
qOddENxeLxL%252B13drGKYUgA%253D 253D%%250A
我也尝试过使用其他编码方案,但无法产生相同的结果。
答案 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调用时,它会通过改造自动编码,我将编码参数传递给改造,以便再次编码。
顺便说一句,谢谢你的解释。 :)