2013-01-16 35 views
6

Tôi có một số csv file có chứa các từ bằng tiếng Anh, sau đó là bản dịch tiếng Hindi của chúng. Tôi đang cố gắng để đọc các tập tin csv và làm một số xử lý thêm với nó. Tệp csv trông giống như vậy:Đọc các ký tự unicode từ tệp csv

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

Tôi đang cố gắng đọc dòng tệp csv và hiển thị những gì đã được viết. Đoạn mã (Java) như sau:

//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(); 
        } 
       } 
} 

Tuy nhiên, đầu ra sau đây là những gì tôi nhận được:

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

My Java mà không phải là tuyệt vời và dù tôi đã trải qua một số bài viết trên SO, tôi cần thêm trợ giúp trong việc tìm ra nguyên nhân chính xác của vấn đề này.

+1

Chỉ cần bên bình luận: Bạn không cần phải đánh đồng giá trị boolean như bạn đang làm 'nếu (dòng .contains ("English") == true) 'và' (startSeen == true) 'thay vào đó bạn có thể trực tiếp sử dụng' if (line.contains ("English")) 'và' (startSeen) 'vì chúng có thể là đúng hay sai. – Smit

+0

@smit: lấy điểm. Cảm ơn! – Sriram

Trả lời

3

Đối với đọc file văn bản nó là tốt hơn để sử dụng dòng nhân vật ví dụ bằng cách sử dụng java.util.Scanner trực tiếp thay vì FileInputStream. Về mã hóa, trước tiên bạn phải đảm bảo rằng tệp văn bản mà bạn muốn đọc được lưu dưới dạng 'UTF-8' và không phải là khác. Tôi cũng lưu ý trong hệ thống của mình, Tôi phải lưu tệp nguồn java của mình là 'UTF-8' cũng như làm cho nó hiển thị chữ cái tiếng Hin-ddi đúng cách.

Tuy nhiên tôi muốn đề nghị cách đơn giản hơn để đọc tập tin csv như sau:

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

see the output

+0

Sự cố là tệp của tôi chưa được lưu dưới dạng 'UTF-8'. Khi tôi kết hợp giải pháp dán nhãn lệnh println của Evgeniy trong trình soạn thảo, Eclipse đã cho tôi tùy chọn lưu nội dung dưới dạng UTF-8. Theo một nghĩa nào đó, cả hai bạn đều hiểu đúng. Cảm ơn! – Sriram

+0

Cùng một vấn đề. Tệp Java của tôi chưa được lưu dưới dạng UTF-8. +1 cho Trợ giúp trả lời đầy đủ. –

+0

Tôi đã tạo một tệp văn bản mới và đã viết vài từ Devanagari (Tiếng Hindi/Marathi) ở đó. Trong khi lưu nhật thực hỏi tôi có muốn lưu nó dưới dạng UTF-8 hay không. Tôi nói có. Vì vậy, tôi đoán tệp ở định dạng bắt buộc. Nhưng mã trên không hoạt động. Nó không in bất cứ thứ gì. Nếu tôi chỉ có các ký tự tiếng Anh; sau đó chỉ có nó in. Nó có dành riêng cho bất kỳ phiên bản Java nào không? –

2

Tôi nghĩ bảng điều khiển của bạn không thể hiển thị ký tự Hindi. Hãy thử

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

để kiểm tra

+0

Tôi đã thử lệnh của bạn trong trình chỉnh sửa và dường như đã xảy ra sự cố. Khi lưu tệp, Eclipse đã đưa ra các tùy chọn lưu mã trong UTF-8. Bây giờ nó hoạt động. Cảm ơn! – Sriram

0

Vì vậy, như đã thảo luận trong câu trả lời ở trên; giải pháp là HAI bước 1) Lưu tệp txt của bạn dưới dạng UTF-8 2) Thay đổi thuộc tính của mã Java của bạn để sử dụng UTF-8 Trong Eclipse; nhấp chuột phải vào tệp Java; Properties -> Resurces -> Text File Encoding -> Khác -> UTF-8

Tham khảo ảnh chụp màn hình đưa ra trên http://howtodoinjava.com/2012/11/27/how-to-compile-and-run-java-program-written-in-another-language/

Các vấn đề liên quan