ISO-8859-1をUTF-8自動誤り訂正に変換

1826 ワード

JAvaではクライアントからのパラメータの多くはISO-8859-1の符号化であり,必要に応じてUTF-8に変換する符号化を用いる.
方法は次のとおりです.
new String(source.getBytes("ISO-8859-1"), "UTF-8") 

これでUTF-8のコードに変換されます.
実際の使用では、クライアントが指定した符号化フォーマットに基づいて自動的に変換するフレームワークもあります.変換を再び呼び出すと、文字化けしてしまいます.
では、指定文字列がUTF-8になっているかどうかを判断する方法が必要です.複数の試行と検索エンジンの検索を経ても、1つの文字列の現在の符号化フォーマットが何であるかを直接判断する適切な方法が見つからなかった.
最後に関係を見つけた
utf 8の符号化フォーマットiso-8859-1がutf-8に変換された後に得られる新しい文字列の長さは、元の文字列の長さに等しい
iso-8859-1の符号化フォーマットをutf-8に変換した後に得られた新しい文字列の長さは元の文字列の長さに等しくない
符号化フォーマットによってバイトの格納方法が異なるため
ISO-8559-1はシングルバイト符号化
UTF-8は1バイトの範囲内の文字に対して依然として1バイトで表し、漢字に対して3バイトで表す
詳細については、以下を参照してください.https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/index.html
最終コードは次のとおりです.
public static String autoToUtf8(String str) {
        if (null == str) {
            return null;
        }
        String newStr = new String(str.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        if (str.length() == newStr.length())
            return str;
        return newStr;
    }

この方法は互換性がどうなのか分からないが,現在は初歩的な考えにすぎない.もし皆さんが何か新しい発見があれば、いつでもメッセージを残してください.