Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson';解析CSV文件时出现CharConversionException;CSV数据格式模块_Java_Csv_Jackson_Jackson Modules - Fatal编程技术网

Java 使用Jackson';解析CSV文件时出现CharConversionException;CSV数据格式模块

Java 使用Jackson';解析CSV文件时出现CharConversionException;CSV数据格式模块,java,csv,jackson,jackson-modules,Java,Csv,Jackson,Jackson Modules,我正在尝试使用的解析文件 我尝试了他们项目主页上给出的示例代码() 我可以使用 我试图通过互联网上的这个错误找到答案,但找不到有用的答案。请有人告诉我遗漏了什么 很可能您正在阅读的内容不是UTF-8编码的,而是使用其他内容,例如拉丁语-1(ISO-8859-1)。 我认为您收到的错误消息不是很好,所以可能需要改进以提出可能的原因,因为这是一个相对常见的问题 要读取非Unicode编码,您需要自己构造Reader(因为不可能可靠地自动检测差异——尽管可能有Java LIB可以使用试探法来尝试自动确

我正在尝试使用的解析文件

我尝试了他们项目主页上给出的示例代码()

我可以使用

我试图通过互联网上的这个错误找到答案,但找不到有用的答案。请有人告诉我遗漏了什么

很可能您正在阅读的内容不是UTF-8编码的,而是使用其他内容,例如拉丁语-1(ISO-8859-1)。 我认为您收到的错误消息不是很好,所以可能需要改进以提出可能的原因,因为这是一个相对常见的问题

要读取非Unicode编码,您需要自己构造
Reader
(因为不可能可靠地自动检测差异——尽管可能有Java LIB可以使用试探法来尝试自动确定这一点):

或者,用于编码文件的任何内容都应该指定要使用的UTF-8编码


还有其他可能的原因(如文件截断),但字符编码不匹配是常见的原因。这里的主要奇怪之处实际上是特定的字符代码,它不是(大多数?)ISO-8859-x编码中的可打印字符。

在大多数情况下有效的解决方法是导入Apache Tika并使用AutoDetectReader(请参阅)

试试这个:

   //get a file stream in utf format for this file (since they are often not in utf by 
   Charset charset = new AutoDetectReader(new FileInputStream(file)).getCharset();
   String f = FileUtils.readFileToString(file, charset);
   CsvMapper mapper = new CsvMapper();
   CsvSchema schema = CsvSchema.emptySchema().withHeader();
   MappingIterator<Map<String, String>> it = mapper.reader(Map.class).with(schema).readValues(f.getBytes());
//获取此文件的utf格式的文件流(因为它们通常不是由
Charset Charset=new AutoDetectReader(new FileInputStream(file)).getCharset();
字符串f=FileUtils.readFileToString(文件,字符集);
CsvMapper映射器=新的CsvMapper();
CsvSchema schema=CsvSchema.emptySchema().withHeader();
MappingIterator it=mapper.reader(Map.class).with(schema.readValues)(f.getBytes());

我还使用apache commons将文件转换为字符串。这可以在没有apache commons的情况下完成,只需谷歌搜索即可。我确信我的文件中没有不可打印或特殊字符。我可以使用
openCVS
读取我的文件。如果您有触发此操作的示例文件,最好在()处提交错误报告。
Exception in thread "main" java.io.CharConversionException: Invalid UTF-8 start byte 0x92 (at char #269, byte #-1)
at com.fasterxml.jackson.dataformat.csv.impl.UTF8Reader.reportInvalidInitial(UTF8Reader.java:393)
at com.fasterxml.jackson.dataformat.csv.impl.UTF8Reader.read(UTF8Reader.java:245)
at com.fasterxml.jackson.dataformat.csv.impl.CsvReader.loadMore(CsvReader.java:438)
at com.fasterxml.jackson.dataformat.csv.impl.CsvReader.hasMoreInput(CsvReader.java:475)
at com.fasterxml.jackson.dataformat.csv.CsvParser._handleStartDoc(CsvParser.java:461)
at com.fasterxml.jackson.dataformat.csv.CsvParser.nextToken(CsvParser.java:414)
at com.fasterxml.jackson.databind.ObjectReader._bindAndReadValues(ObjectReader.java:1492)
at com.fasterxml.jackson.databind.ObjectReader.readValues(ObjectReader.java:1335)
at com.til.etwealth.etmoney.util.alok.main(alok.java:18)  
mapper.readValues(new InputStreamReader(new FileInputStream(csvFile), "ISO-8859-1");
   //get a file stream in utf format for this file (since they are often not in utf by 
   Charset charset = new AutoDetectReader(new FileInputStream(file)).getCharset();
   String f = FileUtils.readFileToString(file, charset);
   CsvMapper mapper = new CsvMapper();
   CsvSchema schema = CsvSchema.emptySchema().withHeader();
   MappingIterator<Map<String, String>> it = mapper.reader(Map.class).with(schema).readValues(f.getBytes());