当前位置: 首页 > 面试题库 >

使用OpenCSV解析包含Unicode字符的CSV文件

洪飞鸿
2023-03-14
问题内容

我正在尝试在NetBeans
6.0.1中使用OpenCSV解析.csv文件。我的文件包含一些Unicode字符。当我在输出中写入字符时,字符以其他形式显示,例如(HJ1’-E
/;)。当我在记事本中打开此文件时,它看起来还可以。

我使用的代码:

CSVReader reader=new CSVReader(new FileReader("d:\\a.csv"),',','\'',1);
    String[] line;
    while((line=reader.readNext())!=null){
        StringBuilder stb=new StringBuilder(400);
        for(int i=0;i<line.length;i++){
            stb.append(line[i]);
            stb.append(";");
        }
        System.out.println( stb);
    }

问题答案:

首先,您需要知道文件的编码格式,例如UTF-8或UTF-16。生成此文件的原因是什么?

在那之后,它相对简单-
您需要创建一个FileInputStream包装成InputStreamReader而不是的包装FileReader。(FileReader始终使用系统的默认编码。)指定创建时要使用的编码InputStreamReader,如果选择了正确的编码,则所有内容都应开始工作。

请注意,您不需要使用OpenCSV进行检查-您可以自己阅读文件的文本并全部打印出来。我不确定是否System.out可以处理非ASCII字符-
您可能希望找到一种不同的检查字符串的方式,例如将字符的各个值打印为整数(最好以十六进制表示),然后将它们与unicode.org上的图表进行比较。另一方面,您可以尝试正确的编码,然后看看会发生什么…

编辑:好的,所以,如果您使用的是UTF-8:

CSVReader reader=new CSVReader(
    new InputStreamReader(new FileInputStream("d:\\a.csv"), "UTF-8"), 
    ',', '\'', 1);
String[] line;
while ((line = reader.readNext()) != null) {
    StringBuilder stb = new StringBuilder(400);
    for (int i = 0; i < line.length; i++) {
         stb.append(line[i]);
         stb.append(";");
    }
    System.out.println(stb);
}

(我希望您有一个try / finally块可以用您的真实代码关闭文件。)



 类似资料:
  • 我在Mako模板中有以下代码: 这将url转义应用于表示公司的对象的名称字符串。然后在URL中使用得到的转义字符串。Mako文档说明使用提供url编码。 在服务器上,我将公司名称部分接收到参数中: 然后使用investment_name作为键返回到模板中提取它的字典中。 这对于公司名称中的所有标准大小写(如空格、斜杠和单引号)都很适用。但是,如果公司名称包含ascii字符集之外的unicode字符

  • 我有一个CSV文件,我想用开放CSV的csv阅读器在Java中解析。 为此,我创建了一个Bean对象,信息映射到该对象。我的有点长,所以这是我从教程中得到的一个例子: 我用来解析CSV文件并将信息映射到bean的代码类似于以下代码: 问题在于,我的CSV不仅包含原始数据,还包含列标题和其他数据。对于专栏标题,我只从某行读取我的文件,解决了这个问题: (1 是开始读取的行) 其他数据主要是文件末尾(

  • 当我使用opencsv读取csv文件时,它在字符串末尾遇到\时无法正常工作。它使字符串的"部分,而不是'\',因为我想。我想一定有什么方法可以添加另一个\,让它转义\字符?无需手动编辑csv文件。我找过了,但什么也没找到。 为了澄清我的问题,看起来是这样的: csv文件 我的代码看起来像这样(不是真的,但它显示了我的问题): 我想把它解析成一个String[],每行有4个元素,但是最后一行只解析成

  • 问题内容: 当我使用opencsv读取csv文件时,在字符串末尾遇到“ \”时,它无法正常工作。它使字符串的一部分成为“”,而不是我想要的“ \”。我猜必须使用某种方法来添加另一个“ \”以使其转义为“ \”字符吗?而 无需 手动编辑csv文件。我已搜索但未找到任何内容。 为了澄清我的问题,它看起来像这样: CSV文件 我的代码看起来像这样(不是真的,但是它显示了我的问题): 我希望将此解析为每行

  • 我正在尝试使用DOMParser解析带有HTML字符串的XML文件。问题是getTextContent()方法只获取文本,而不获取其中的任何HTML标记。我希望字符串按原样返回,而不是按解析后的版本返回。我搜索了整个网络,却找不到任何对我有帮助的东西。顺便说一句,我无法对HTML字符串进行任何更改,因为在大约500个文件中有超过100k个Sting。 测验xml文件 Java模块 实际输出 这里有

  • 我在https://github.com/owlcs/owlapi/tree/master/contract/src/test/java.org/coode/owlapi/example上运行owlapi示例,以检索具有奇数字符的类的子类。我的owl文件包含带有奇数字符的类,如/,(但解析器似乎在奇数字符之前截断它们,并最终抛出一个错误。我查看了ManchesterOWLSyntaxTokeniz