2017-05-10 14 views
0

私はDBからのデータを含むcsvファイルを作成し、それをUTF-16LEにエンコードして、同じような特殊文字を取得しようとしています。 Javaのファイル:javaでUTF-16ファイルを読むと、データが返されない

BufferedReader br = new BufferedReader(new InputStreamReader(
fileContent, "utf16")); 

データが取得されていません。

のように入力ストリームを読みながら、私はUTF-8エンコードを使用する場合:

BufferedReader br = new BufferedReader(new InputStreamReader(
fileContent, "utf8")); 

バッファリーダーを使用して、私はすべてのデータを取得していますが、特殊文字が来ているように:

Brut¿l¿ 

それをどこにBrutéléでなければなりません。

UTF-16でjavaでデータを取得するにはどうすればよいですか? JavaコードでUTF-16LEとANSIを試しました。 ANSIは処理されない例外を与えており、16LEは違いはありません。

`

OutputStream outStream = null; 
    InputStream inputStream = null; 
    final int BUFFER_SIZE =33554432; 

    try { 

     inputStream = new ByteArrayInputStream(input.getBytes("UTF-16LE")); 

     System.out.println("outStream = " + outStream); 

     byte[] buffer = new byte[BUFFER_SIZE]; 
     int bytesRead = -1; 
     if (inputStream != null) 
      try { 
       while ((bytesRead = inputStream.read(buffer)) != -1) { 
        outStream.write(buffer, 0, bytesRead); 

        if (outStream != null) 

         outStream.close(); 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

    } catch (UnsupportedEncodingException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    }` 
+0

でそれを確認することができ

あなたは 'UTF-16'と文字セットを指定しようとしましたか? – eis

+0

はい私はutf-16とutf-16leとしてcharset名を設定しました。まだデータがありません。 –

+0

'StandardCharsets'を使ってみましたか?それは文字列リテラルよりも文字セットにアクセスする良い方法です。 16進エディタに見られるように、ファイルのサンプル*バイト*を投稿できますか?アクセント付き文字を格納するためにUTF-16を使用する必要はないことに注意してください... UTF-8は完全にそのことが可能です。おそらく、ファイルを書き込むために使用しているコードを表示する必要があります。 –

答えて

-1

あなたはエンコーディングのunproperタイプを使用することがあります。以下は

は、ファイルをエクスポートするためのコードです。 正しい文字セットの種類は次のとおりです Charset

0

すでに言われている通り@John Skeetです。 42 72 75 74 E9 6C E9というバイトシーケンスはUTFではなく、ISO_8859_1です。あなたは(ユニコード意識コンソール上の)次のスニペット

byte[] b = {0x42, 0x72, 0x75, 0x74, (byte) 0xE9, 0x6C, (byte) 0xe9}; 
System.out.println("ISO_8859_1: " 
     + new String(b, StandardCharsets.ISO_8859_1)); 
System.out.println("UTF_8  : " 
     + new String(b, StandardCharsets.UTF_8)); 
System.out.println("UTF_16LE : " 
     + new String(b, StandardCharsets.UTF_16LE)); 

出力

ISO_8859_1: Brutélé 
UTF_8  : Brut�l� 
UTF_16LE : 牂瑵泩� 
+0

出力ファイルのフォーマットを変更する: 'BufferedReader br = new BufferedReader(new InputStreamReader(fileContent、" ISO-8859-1 "));'問題を解決しました。どうもありがとう :) –

関連する問題