【问题标题】:Reading unicode characters from csv file从 csv 文件中读取 unicode 字符
【发布时间】:2013-01-16 06:25:20
【问题描述】:

我有一个csv file,其中包含英语单词和印地语翻译。我正在尝试读取 csv 文件并对其进行进一步处理。 csv 文件如下所示:

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

我正在尝试逐行读取 csv 文件并显示已写入的内容。代码sn -p(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 的帖子,但我需要更多帮助来找出这个问题的确切原因。

【问题讨论】:

  • 旁注:您不必像 if(line.contains("English") == true) 和 (startSeen == true) 那样将布尔值等同起来,而是可以直接使用 if(line.contains("English")) 和 (startSeen),因为它们可能是 true 或 false .
  • @smit:点了。谢谢!

标签: java file-io unicode


【解决方案1】:

对于读取文本文件,最好使用字符流,例如直接使用 java.util.Scanner 而不是 FileInputStream。关于编码,您必须首先确保您要读取的文本文件保存为“UTF-8”而不是其他方式。我还注意到在我的系统中,我还必须将我的 java 源文件保存为 'UTF-8' 以使其正确显示印地语字符。

但我想建议更简单的读取 csv 文件的方法如下:

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

【讨论】:

  • 问题是我的文件没有保存为UTF-8。当我在编辑器中加入 Evgeniy 的粘贴 println 命令的解决方案时,Eclipse 为我提供了将内容保存为 UTF-8 的选项。从某种意义上说,你们都做对了。谢谢!
  • 同样的问题。我的 Java 文件没有保存为 UTF-8。 +1 以获得帮助完整答案。
  • 我创建了一个新的文本文件,并在那里写了几个梵文(印地语/马拉地语)单词。保存eclipse时问我是否要将其保存为UTF-8。我说是。所以我猜文件是必需的格式。但是上面的代码不起作用。它不打印任何东西。如果我只有英文字符;然后只有它打印。它是否特定于任何 Java 版本?
  • @jon Kartago ;尽管您已将其标记为粗体;我忘记保存我的 Java 文件以使用 UTF-8
【解决方案2】:

我认为您的控制台无法显示印地语字符。试试看

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

测试

【讨论】:

  • 我在编辑器中尝试了你的命令,这似乎是问题所在。在保存文件时,Eclipse 提供了以 UTF-8 保存代码的选项。现在它起作用了。谢谢!
【解决方案3】:

正如上面的答案所讨论的;解决方案是两个步骤 1) 将您的 txt 文件另存为 UTF-8 2) 更改 Java 代码的属性以使用 UTF-8 在日食中;右键单击Java文件; 属性 -> 资源 -> 文本文件编码 -> 其他 -> UTF-8

请参阅上给出的屏幕截图 http://howtodoinjava.com/2012/11/27/how-to-compile-and-run-java-program-written-in-another-language/

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 2019-03-18
    • 2012-11-21
    • 2018-06-22
    • 2016-12-30
    • 2011-01-19
    • 1970-01-01
    相关资源
    最近更新 更多