Почему при чтении моего CSV происходит сбой Scala? - PullRequest
9 голосов
/ 20 августа 2011

Файл здесь

http://dl.dropbox.com/u/12337149/history.csv

Я пытаюсь прочитать данные следующим образом

  for (line <- Source.fromFile(new File(file)).getLines) {
   println(line)
  }

Я получаю следующую ошибку

Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1
    at java.nio.charset.CoderResult.throwException(CoderResult.java:260)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:319)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
    at java.io.InputStreamReader.read(InputStreamReader.java:167)
    at java.io.BufferedReader.fill(BufferedReader.java:136)
    at java.io.BufferedReader.readLine(BufferedReader.java:299)
    at java.io.BufferedReader.readLine(BufferedReader.java:362)
    at scala.io.BufferedSource$BufferedLineIterator.<init>(BufferedSource.scala:32)
    at scala.io.BufferedSource.getLines(BufferedSource.scala:43)
    at com.alluvia.reports.RunIGConverter$$anonfun$main$1.apply(RunIGConverter.scala:17)
    at com.alluvia.reports.RunIGConverter$$anonfun$main$1.apply(RunIGConverter.scala:15)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:34)
    at scala.collection.mutable.ArrayOps.foreach(ArrayOps.scala:38)
    at com.alluvia.reports.RunIGConverter$.main(RunIGConverter.scala:15)
    at com.alluvia.reports.RunIGConverter.main(RunIGConverter.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Файл открывается очень хорошо в Excel. Я думаю, что это какой-то тип проблемы кодирования, но я не знаю обходной путь

1 Ответ

34 голосов
/ 20 августа 2011

Я бы попробовал кодировку ISO8859_1 или Cp1252, если это не сработало, вот так:

Source.fromFile(new File(file), "ISO-8859-1").getLines()

Вы можете увидеть, какие кодировки Sun Java поддерживает здесь .Я забыл, должны ли вы использовать версии nio или io.(Как вы можете видеть из моего ответа, который использовал оба.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...