sql >> データベース >  >> RDS >> Mysql

ファイルをCp1252からutf-8javaに変換します

    変換プロセスを検証する1つの方法は、エラーのある文字を特殊文字に黙って置き換えるのではなく、エラーを回避するように文字セットデコーダーとエンコーダーを構成することです。

    CharsetDecoder inDec=Charset.forName("windows-1252").newDecoder()
      .onMalformedInput(CodingErrorAction.REPORT)
      .onUnmappableCharacter(CodingErrorAction.REPORT);
    
    CharsetEncoder outEnc=StandardCharsets.UTF_8.newEncoder()
      .onMalformedInput(CodingErrorAction.REPORT)
      .onUnmappableCharacter(CodingErrorAction.REPORT);
    
    try(FileInputStream is=new FileInputStream(filepath);
        BufferedReader reader=new BufferedReader(new InputStreamReader(is, inDec));
        FileOutputStream fw=new FileOutputStream(destpath);
        BufferedWriter out=new BufferedWriter(new OutputStreamWriter(fw, outEnc))) {
    
        for(String in; (in = reader.readLine()) != null; ) {
            out.write(in);
            out.newLine();
        }
    }
    

    ここでは、出力エンコーダーが対称になるように構成されていますが、UTF-8 はすべてのUnicode文字をエンコードできますが、他の変換を実行するために同じコードを使用する場合は、対称にすることで役立ちます。

    さらに、入力ファイルが別のエンコーディングである場合、これは役に立ちませんが、バイトを誤って解釈すると有効な文字になることに注意してください。考慮すべきことの1つは、入力エンコーディングが"windows-1252"かどうかです。 実際には、システムのデフォルトのエンコーディングを意味していました(そしてそれが本当に同じかどうか)。疑わしい場合は、Charset.defaultCharset()を使用できます。 Charset.forName("windows-1252")の代わりに 実際に意図された変換がdefaultの場合 →UTF-8




    1. mysql_insert_idスレッドは安全ですか?

    2. ランタイムエラー:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

    3. バージョン11のlocaldbの接続文字列は何ですか

    4. オラクルに日付と時刻を挿入する方法は?