編碼其實,就是二進制數,與字符的映射關係。
那麼,它只和二進制數和字符有關。Java內存中的字符(字符串),都是Unicode編碼的。
所以,當二進制數是GBK編碼的時候,首先要用解碼器將GBK轉換成Unicode編碼,然後再保持到字符當中。
也就是說,應該先得到二進制數據:byte [] data = ...;
然後,生成字符串:String str = new String(data,"GBK");
這樣,這個字符串就可以正常顯示了。
如果,輸出的數據,要UTF-8編碼的,那麼,應該是這樣:byte [] outData = str.getBytes("UTF-*");
然後,out.write(outData);將數據寫入的IO當中。
不應該這種寫法:new String(str.getBytes("gbk"), "utf-8");
這種寫法,一般都是對字符數據編碼理解得不透徹,才這麼寫的。
編碼編的是二進制數據,編碼後,二進制數據(字節流或字節數組)會轉換成Java語言的字符(串)型的數據,供編程人員使用。
拿ajax來說,默認編碼是utf-8,我們不用管後端的項目編碼是什麼,只需要按照utf-8的格式來編碼即可:new String(str.getBytes(), "utf-8");
之前一直搞不清spring的字符集過濾器到底有什麼作用,現在明白了。