URLEncoder使用
背景介紹
今天需要傳一些描述資訊給前端,需要寫在header裡面,所以要先編碼成utf-8的格式,再有前端解碼獲取。
工作過程
前提:我要傳給前端的文字是我從中臺那邊拿到的。
public class URLEncoderTest {
@Test
public void test_01() throws UnsupportedEncodingException {
String str = "這是前臺給我的資料 ";
final String encode = URLEncoder.encode(str, "utf-8");
System.out.println(encode); //
}
}
// 列印出來的結果:
//%E8%BF%99%E6%98%AF%E5%89%8D%E5%8F%B0%E7%BB%99%E6%88%91%E7%9A%84%E6%95%B0%E6%8D%AE+
末尾莫名其妙出來了一個“+”。我想了很久都沒想明白,我以為是java編碼的原因,還暗自嘲諷了一下,然後我採用了一個非常low的方式解決了這個問題。
手動給解碼後的字串刪除'+'號,經過實驗,前端可以完美的解碼。
System.out.println(StringUtils.remove(encode, '+'));
//%E8%BF%99%E6%98%AF%E5%89%8D%E5%8F%B0%E7%BB%99%E6%88%91%E7%9A%84%E6%95%B0%E6%8D%AE
review的時候,同事提出了意見,問我這裡為什麼要加上這一行,我解釋完之後,同時表示幫我排查下原因,然後他不到五分鐘就發現了。
我獲取到的字串裡有空格。
我去中臺看了我填入的描述資訊,果然是有空格的。
public class URLEncoderTest {
@Test
public void test_01() throws UnsupportedEncodingException {
String str = "這是前臺給我的資料";
final String encode = URLEncoder.encode(str, "utf-8");
System.out.println(encode);
}
// 列印結果
//%E8%BF%99%E6%98%AF%E5%89%8D%E5%8F%B0%E7%BB%99%E6%88%91%E7%9A%84%E6%95%B0%E6%8D%AE
}
URLEncoder#encode分析
貼上一部分程式碼
for (int i = 0; i < s.length();) {
int c = (int) s.charAt(i);
if (dontNeedEncoding.get(c)) {
// 當 c 是 ‘’ 時,將 c 賦值為 ‘+’,然後加到out上
if (c == ' ') {
c = '+';
needToChange = true;
}
out.append((char)c);
i++;
}
}
所以會出現"+"
總結
1、要細心,程式設計師這一行一定要細心!
2、多問人(前提是你要有願意幫你的人)
3、多看原始碼