当前位置: 首页 > 知识库问答 >
问题:

导入带有字符的csv问题

茅星雨
2023-03-14

当我导入包含一些国家/地区的CSV文件时,我遇到了一些字符的问题。它没有很好的编码然后我得到了?标记,而不是CSV文件中写入的字符。这里有一些国家让我面临这个问题:奥兰群岛、圣巴特勒米、科特迪瓦、库拉索岛。

下面是导入csv文件的代码:

ICsvBeanReader beanReader = new CsvBeanReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8),
                    new CsvPreference.Builder(CsvPreference.STANDARD_PREFERENCE).useQuoteMode(new AlwaysQuoteMode()).build());

首先我使用了FileReader,所有这些国家都出现了问题,然后我改为InputStreamReader并添加了这个UTF-8字符集,问题几乎解决了。当我使用字符集UTF-8时,我只在阅读这个国家的“奥兰群岛”时遇到问题,结果我得到了“兰群岛”。作为charset,我也尝试过ISO_8859_1和Windows-1252,但“奥兰群岛”总是存在同样的问题。

有人知道我应该用哪个字符集来解决这个问题吗?

共有1个答案

奚翰海
2023-03-14

Java文件阅读器不处理字节顺序标记。我希望这就是问题所在。

不同的版本处理它不同。

用下面的方法包装输入流。它检测文件类型。此方法可在comons-io中使用。如果你没有公共资源-io,从那个库中抓取代码。大约10到20行。希望这管用。

    public static InputStreamReader getInputStreamReader(InputStream inputStream) throws IOException
    {
        BOMInputStream bOMInputStream = new BOMInputStream(inputStream, false, ByteOrderMark.UTF_8,
               ByteOrderMark.UTF_16BE, ByteOrderMark.UTF_16LE,
               ByteOrderMark.UTF_32BE, ByteOrderMark.UTF_32LE);
        ByteOrderMark bom = bOMInputStream.getBOM();
        String charsetName = bom == null ? "UTF-8" : bom.getCharsetName();
        return new InputStreamReader(bOMInputStream, charsetName);
    }
 类似资料:
  • 我有一个导出CSV文件的PHP脚本。我的用户然后在Excel中编辑文件,保存它,并重新上传它。 如果他们在字段中键入欧元符号,则在上载文件时,欧元符号以及之后的所有内容都将丢失。我正在使用str_getcsv函数。 如果我尝试转换编码(比如UTF-8),欧元符号就会消失,我会得到一个缺少的字符标记(通常由一个空白的正方形或菱形中的问号表示)。 如何将编码转换为UTF-8,同时保留欧元符号(和其他非

  • 我必须使用SSIS从数据库导出CSV文件 这很容易做到,但当我必须将同一个CSV文件导入另一个数据库(从另一台服务器)时,问题就来了,因为我有两列,其中包含以下字符:逗号(,)、撇号(')、分号(;),冒号(:),竖线(|)。我不知道哪个应该是平面文件连接的设置,哪个应该是标题行分隔符、行分隔符、列分隔符。。。以便执行这两个操作(导出,然后导入)。 我尝试了许多组合,但我仍然得到错误,如: [平面

  • 它对一些包含“-”的词有效,但不是对所有的词都有效,我不知道为什么它不起作用。 我正在搜索的字段是经过分析的,其中包含有“-”字符和没有“-”字符的单词版本。 我正在使用分析器:org.apache.lucene.analysis.standard.StandardAnalyzer 如果我搜索没有“*”的“v-strom”,它可以工作,但如果我只搜索“v-str”,例如,我不会得到结果。(应该会有

  • 我想进口一台电脑。通过以下方式将csv文件导入MySQL数据库: 但我发现以下错误,我无法解释原因: 有什么建议吗?

  • 我是AWS DataPipeline的新手。我创建了一个成功的datapipeline来将所有内容从RDS拉到S3 bucket。一切都管用。我在S3 bucket中看到了我的。csv文件。但我在表中存储西班牙语名称,在csv中,我看到的是“García”而不是“García”

  • 嘿,我用oracle DB和Iron Python一起使用,但我在使用包含字符“‘”的字符串时遇到了麻烦,就像Mc'Donalds中一样。(我知道它在寻找结尾')从用户输入中接受字符串,我想按原样将其添加到我的数据库中,这意味着不省略或更改任何字符。我怎么做?