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に対してスペースを節約しているからかもしれません.
/**
	 * 
	 *       (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, ' ');
	}