UTF-8変換GBKの悲劇:特殊文字C 2 A 0
853 ワード
この問題はもっと早く発生しました.印象派に伝えられた作品説明XML(GBKコード)の中には文字化けがよく含まれています.しかも最後まで混乱してしまいます.最初はあまり手がかりがなかったですが、ようやく一部の手がかりが分かりました.GBKの文字は小さすぎて、いくつかの特殊な文字のトランスコードに文字化けしています.このような文字です.ユーザーはページの端から文字をコピーし、画面にコピーして正常に表示され、作品XMLファイル(UTF 8コード)に保存され、正常に表示されます.しかし、作品をアップロードする時、該当するXMLコードをGBKに変換することによって、文字化けが発生しました.
処理方法:
方法1:変換時にテキスト情報を特殊処理し、0×20は0 xC 2 A 0の代わりになります.
方法2:作品XMLファイルは直接UTF 8で符号化して伝送します.
方法は少し頭が痛くて、足を治療して足の味を治療して、この問題を解決しましたが、標準が足りないです.完璧ではないです.方法二はサーバーのサポートが必要ですが、この問題を完璧に解決できます.以前のサーバーがGBKで符号化された理由は、GBKがUTF 8に対してスペースを節約しているからかもしれません.
処理方法:
方法1:変換時にテキスト情報を特殊処理し、0×20は0 xC 2 A 0の代わりになります.
方法2:作品XMLファイルは直接UTF 8で符号化して伝送します.
方法は少し頭が痛くて、足を治療して足の味を治療して、この問題を解決しましたが、標準が足りないです.完璧ではないです.方法二はサーバーのサポートが必要ですが、この問題を完璧に解決できます.以前のサーバーがGBKで符号化された理由は、GBKがUTF 8に対してスペースを節約しているからかもしれません.
/**
*
* (NO-BREAK SPACE,Unicode 0x00a0,UTF-8 :0xC2A0) 。
*
* “?” 。
*/
public static String nobreakSpaceToSpace(String str) {
if (str == null) {
return null;
}
char nbsp = 0x00a0;
return str.replace(nbsp, ' ');
}