java - 要解析的文件编码不正确
问题描述
我在解析文件时遇到问题。输入文件是 EE windows 1250 编码的。尝试解析时出现错误
Exception in thread "main" java.lang.IllegalStateException: MalformedInputException reading next record: java.nio.charset.MalformedInputException: Input length = 1
at org.apache.commons.csv.CSVParser$CSVRecordIterator.getNextRecord(CSVParser.java:145)
at org.apache.commons.csv.CSVParser$CSVRecordIterator.hasNext(CSVParser.java:155)
at com.test.converter.CsvConverter.processInputCSV(CsvConverter.java:148)
at com.test.converter.CsvConverter.main(CsvConverter.java:249)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:274)
Caused by: java.nio.charset.MalformedInputException: Input length =
我的方法
public List<CSVRecord> collectAllEntries(Path path) throws IOException {
List<CSVRecord> store = new ArrayList<>();
try (
Reader reader = Files.newBufferedReader(path);
CSVParser csvParser = new CSVParser(reader, CSVFormat.EXCEL)
) {
for (CSVRecord csvRecord : csvParser) {
store.add(csvRecord);
}
} catch (IOException e) {
e.printStackTrace();
throw e;
}
return store;
}
我该如何解决这个问题?
解决方案
这里的问题是您正在尝试windows-1250
使用UTF-8
. Files.newBufferedReader(path)
默认UTF-8
为.
当您读取文件时,传递windows-1250
文件被编码的编码方案(在这种情况下)以指示缓冲阅读器使用它,如下所示;
Files.newBufferedReader(path, Charset.forName("windows-1250"));
这是编码的良好开端 - https://www.baeldung.com/java-char-encoding
推荐阅读
- jquery - 如果我在 jquery 的 attr() 方法中给它多个样式,为什么 attr() 会应用最后一个重复样式?
- sql - How to get time difference inside window
- salesforce - 如何使用节点 js 访问 salesforce 公共图像链接?
- c# - 在 C# windows 窗体属性网格中,您可以提供类别本身的描述吗?
- reactjs - 无法使用 Redux 调度切换复选框
- c++ - C++如何调试生产中的悬空指针
- angular - 将表单中每个循环产品的数据显示为值,而不是 Angular 中的占位符
- java - 打开 Equella 脚本编码
- docker - 呃!enoent ENOENT:没有这样的文件或目录,打开'/opt/frontend/package.json'
- attributes - Robocopy - 复制后立即为每个源文件添加属性