0

我需要将 CSV 文件读入 Java 应用程序,但该文件是使用 Java 不支持的 Western(Mac OS Roman)编码的。

有人建议我使用字节流读取文本并将超过 128 的所有内容转换为空格字符(ASCII 字符 32)。但我不知道该怎么做。我不知道如何一次处理每个字节,如何转换它们,以及当我到达行尾时如何获取那行“截断”文本,将其拆分为一个数组,然后然后将数据从我需要的索引中提取出来。

SortedMap<String, OBJ_NAME> mapResults = new TreeMap<String, OBJ_NAME>();
String url = 'url-to-file';
InputStream inputStream = null;
InputStreamReader = null;
CSVReader = csvReader = null;
final Pattern regexPattern = Pattern.compile("^\\d{2}\\.\\d{1.3}$");

try {
    inputStream = new URL(url).openStream();

    reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
    csvReader = new CSVReader(reader, ',', '"', 1);
    List<String[]> lines = csvReacer.readAll();

    for (String[] line : lines) {
        // logic to grab data from first and second indices of the line
        OBJ_NAME objInstance = new OBJ_NAME();

        objInstance.setFieldOne(line[0]);
        objInstance.setFieldTwo(line[1]);
        mapResults.put(line[1], objInstance);
    }
} catch (Exception e) {
    throw new IOException(e);
} finally {
    // IOUtils from apache commons
    IOUtils.closeQuietly(inputStream);
    IOUtils.closeQuietly(reader);
    IOUtils.closeQuietly(csvReader);
}

因为 CSV 使用的是不受支持的格式,所以上面的逻辑是读取数据错误,因为它不是 UTF-8,所以我得到的结果比我应该得到的要少得多。我不确定是否应该将其输入为 ASCII 和超过 128 个“中断”字符(我不知道该怎么做),或者用字节流来代替(我也不知道该怎么做) .

帮助?此外,任何以过时、不受支持的编码发布带有官方信息的文档的人,都将受到惩罚。

4

0 回答 0