6

コード:

public class MainApplication {

      public static void main(String[] args) throws IOException {

              try{
                  // Open the file that is the first 
                  // command line parameter
                  FileInputStream fstream = new FileInputStream("data/temp.CSV");
                  BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
                  String strLine;
                  //Read File Line By Line
                  while ((strLine = br.readLine()) != null)   {
                  // Print the content on the console
                  System.out.println (strLine);
                  }
                  //Close the input stream
                  in.close();
                    }catch (Exception e){//Catch exception if any
                  System.err.println("Error: " + e.getMessage());
                  }
      }
}

CSVファイルデータ:

19/1/13 13:58:04    0   1610    0   419 0   0
19/1/13 13:58:05    0.01    1599    66  432 0   1
19/1/13 13:58:06    0.02    1603    47  423 0   2
19/1/13 13:58:07    0.03    1602    26  413 0   3
19/1/13 13:58:08    0.04    1605    130 412 0   4

出力:

エラー画面

4

2 に答える 2

4

交換

BufferedReader br = new BufferedReader(new InputStreamReader(in));

BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));

"UTF-8"ファイルのエンコーディングに置き換え.csvます。

ハンドルのこのコンストラクターを使用InputStreamReaderすると、指定された文字セットに従って入力が正しく処理されます。文字セットを指定せず、出力がおかしい場合は、ファイルがシステムのデフォルトとは異なるエンコーディングでエンコードされていることを示しています。

また、あなたはを取り除くことができDataInputStream、書くことができます

BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-16"));

編集 次のことを指摘してくれたヘンリーに感謝します。

出力を見ると、すべての文字が2バイトを使用してエンコードされているようです。これは、エンコーディングがUTF-16であることを示しています。それに応じて、コンストラクターで使用する必要があります"UTF-16"

于 2013-01-29T17:18:52.923 に答える
4

使用する

BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-16LE"));

それ以外の

BufferedReader br = new BufferedReader(new InputStreamReader(in));
于 2013-01-29T17:28:40.310 に答える