2013-01-16 7 views
6

私はcsv fileに英語の単語とヒンディー語の翻訳が含まれています。私はcsvファイルを読み込み、それを使ってさらに処理をしようとしています。 csvファイルはそうのようになります。csvファイルからユニコード文字を読み取る

English,,Hindi,,, 
,,,,, 
Cat,,बिल्ली,,, 
Rat,,चूहा,,, 
abandon,,छोड़ देना,त्याग देना,लापरवाही की स्वतन्त्रता,जाने देना 

私はラインでCSVファイルの行を読み、書かれている内容を表示しようとしています。次のようにコードスニペット(Java)は次のとおりです。

//Step 2. Read csv file and get the string. 
      FileInputStream fis = null; 
      BufferedReader br = null; 
      try { 
       fis = new FileInputStream(new File(csvFile)); 
      } catch (FileNotFoundException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

      boolean startSeen = true; 
      if(fis != null) { 
       try { 
        br = new BufferedReader(new InputStreamReader(fis, "UTF-8")); 
       } catch (UnsupportedEncodingException e2) { 
        // TODO Auto-generated catch block 
        e2.printStackTrace(); 
        System.out.print("Unsupported encoding"); 
       } 
       String line = null; 
       if(br != null) { 
        try { 
         while((line = br.readLine()) != null) { 
          if(line.contains("English") == true) { 
           startSeen = true; 
          } 

          if((startSeen == true) && (line != null)) { 
           StringBuffer sbuf = new StringBuffer(); 
           //Step 3. Parse the line. 
           sbuf.append(line); 
           System.out.println(sbuf.toString()); 
          } 
         } 
        } catch (IOException e1) { 
         // TODO Auto-generated catch block 
         e1.printStackTrace(); 
        } 
       } 
} 

ただし、次の出力は、私が得るものです:

English,,Hindi,,, 
,,,,, 
Cat,,??????,,, 
Rat,,????,,, 
abandon,,???? ????,????? ????,???????? ?? ???????????,???? ???? 

私のJavaはその偉大ではないと私はポストの数を経ていてもSOには、この問題の正確な原因を突き止めるために、より多くの助けが必要です。

+1

で指定されたスクリーンショットを参照してください:あなたはいけないあなたがいる場合、 'やっている(ラインのようなブール値を同一視しなければなりません.contains( "English")== true) 'と'(startSeen == true) 'の代わりに' if(line.contains( "English")) 'と'(startSeen) 'を直接使うことができます。正しいか間違っているか。 – Smit

+0

@smit:要点。ありがとう! – Sriram

答えて

3

をテストするために

System.out.println("Cat,,बिल्ली,,,"); 

を試してみてください。エンコードについては、最初に読みたいテキストファイルが「UTF-8」として保存されていることを確認してください。私もシステムに気づいたJavaソースファイルを「UTF-8」として保存して、ヒンディー文字を正しく表示させる必要があります。

しかし、私は次のようにcsvファイルを読むための簡単な方法を提案したい:

Scanner scan = new Scanner(new File(csvFile)); 
while(scan.hasNext()){ 
    System.out.println(scan.nextLine()); 
} 

see the output

+0

問題は、私のファイルが 'UTF-8 'として保存されていないことでした。 Evgeniyのprintlnコマンドをエディタに貼り付けるという方法を取り入れたとき、Eclipseは私にコンテンツをUTF-8として保存するオプションを与えました。ある意味では、両方の人が正しいと思っています。ありがとう! – Sriram

+0

同じ問題があります。私のJavaファイルはUTF-8として保存されていませんでした。ヘルプフル回答+1。 –

+0

私は新しいテキストファイルを作成し、そこで少数のDevanagari(ヒンディー語/マラーティー語)の単語を書きました。私はUTF-8として保存するかどうかを尋ねていました。私はそう言った。だから私はファイルが必要な形式であると思う。しかし、上記のコードは動作しません。それは何も印刷しません。私は英語の文字しか持っていない。それだけが印刷されます。それはどんなJavaバージョンにも特有ですか? –

2

あなたのコンソールはヒンディー文字を表示できないと思います。代わりのFileInputStreamの直接java.util.Scannerを使用することにより、例えば文字ストリームを使用することをお勧めしますテキストファイルを読み込むための

+0

私はあなたのコマンドをエディタで試してみましたが、それは問題のようでした。ファイルの保存時に、EclipseはUTF-8でコードを保存するオプションを提供しました。今それは動作します。ありがとう! – Sriram

0

上記の回答で述べたように、解決策は2つのステップ 1)あなたのtxtファイルをUTF-8として保存してください 2)JavaコードのプロパティをUTF-8を使用するように変更 Eclipseで; Javaファイルを右クリックします。 プロパティ - > Resurces - >テキストファイルのエンコーディング - >その他 - > UTF-8

ちょうど側のコメント http://howtodoinjava.com/2012/11/27/how-to-compile-and-run-java-program-written-in-another-language/

関連する問題