[JAVA] 以Base64處理http post 亂碼問題.

在開發JAVA專案時遇到Http post回傳的資料變成亂碼. 這是工程師開發時很常遇到問題.
很多情境下讀取文字顯示出來的時候,中文變成亂碼。 或者是輸入的文字,讀進來變成亂碼。(可能是文字檔案,可能是DB等)
使用Base64編碼傳送資料,就可以很方便的不考慮環境問題.這邊附上Sample Code.

在環境設定問題上處理很久,最後決定把文字用Base64 encode處理了.
傳入後再收回來時decode就解決了.也可以忽略環境等等問題.

JDK裡sun.misc套件下的BASE64Encoder和BASE64Decoder這兩個類別
 

final BASE64Encoder encoder = new BASE64Encoder();
final BASE64Decoder decoder = new BASE64Decoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//編碼
final String encodedText = encoder.encode(textByte);
System.out.println(encodedText);
//解碼
System.out.println(new String(decoder.decodeBuffer(encodedText), "UTF-8"));

使用org.apache.commons.codec.binary套件下的Base64類別

final Base64 base64 = new Base64();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//編碼
final String encodedText = base64.encodeToString(textByte);
System.out.println(encodedText);
//解碼
System.out.println(new String(base64.decode(encodedText), "UTF-8"));

JAVA 8 之後 Java 8的java.util套件中,新增了Base64的類別,可以用來處理Base64的編碼與解碼

final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//編碼
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解碼
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));

編碼後從http送出,接收端再decode就可以用了.

也不用考慮環境問題,搞定.