url符号化の問題を解決する

2422 ワード

urlには中国語が含まれているので一般的に符号化が必要ですが、符号化ではブラウザや個人システムの符号化により異なる符号化アクセス形式がある可能性がありますので、復号化時に注意する必要があります.そうしないと、文字化けになりやすいです.最近の仕事でこの問題に遭遇し、文字化けは完全に解決されていないが、次の方法でこのような問題の大部分を解決することができる.
例:url="%25 b 1%25 a 6%25 c 2%25 ed 1%25 cf%25 b 5%25 b 3%25 a 8%25 c 5%25 f 1"復号時に使用
String b1 = URLDecoder.decode(url);
String encode = FileUtil.getEncoding(b1); // b1 
String b2= URLDecoder.decode(b1, encode); // b1 b1 b2 
String b2Encode = FileUtil.getEncoding(b2);// b2 
if (!encode.equals(b2Encode)) {
	b2 = URLDecoder.decode(b1, b2Encode);
}// , b1 b2 。 , getEncoding() ?
次のgetEncodingメソッドの具体的な実装を見てみましょう.
public static String getEncoding(String str) {
        String encode = "GB2312";  
        try {  
            if (str.equals(new String(str.getBytes(encode), encode))) {  
                String s = encode;  
                return s;  
            }  
        } catch (Exception exception) {  
        }  
        encode = "ISO-8859-1";  
        try {  
            if (str.equals(new String(str.getBytes(encode), encode))) {  
                String s1 = encode;  
                return s1;  
            }  
        } catch (Exception exception1) {  
        }  
        encode = "UTF-8";  
        try {  
            if (str.equals(new String(str.getBytes(encode), encode))) {  
                String s2 = encode;  
                return s2;  
            }  
        } catch (Exception exception2) {  
        }  
        encode = "GBK";  
        try {  
            if (str.equals(new String(str.getBytes(encode), encode))) {  
                String s3 = encode;  
                return s3;  
            }  
        } catch (Exception exception3) {  
        }  
        return "";  
    }  

実際には、符号化方式で新規文字列を1つずつ作成し、新規列以前と比較し、同じであればその符号化方式とみなす.
 
標準308構成2
ビアディf 3 dm 2
チーターの奇兵のオファー2
現代飛思veloster 2
ビートルオープンカーオファー2
花冠2
インフィニティg 2
ビュー2
起亜凱尊2
長安自動車悦翔2
陸虎が勝つ2
シボレー科迈羅オファー2
シボレービュー2
シトロエンc 6 2
风行景逸suvどうですか2
マツダ2力翔2
����h�� 2
11種類のカローラ1
12種類の新しい宝来オファー1
 
しかし、現在の問題は中国語にはまだごく少数の文字化けがあり、現在はより良い解決策が必要だ.