2011-08-20 20 views
8

El archivo está aquí¿Por qué falla Scala al leer mi CSV?

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

trato de leer los datos de la siguiente

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

me sale el siguiente error

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) 

El archivo se abre muy bien en Excel. Creo que es algún tipo de problema de codificación, pero no sé el trabajo alrededor

Respuesta

29

que iba a tratar la codificación ISO8859_1 o Cp1252 si eso no funciona, por lo que:

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

Puede ver qué codificaciones Sun Java admite here. Olvidé si se supone que debes usar las versiones nio o io. (Como se puede ver en mi respuesta, que ha utilizado ambos.)

+1

UTF16 hizo el truco – deltanovember

+0

Acabo de recibir el mismo error, ¡y esto lo resolvió! –

+0

Tuve el mismo problema. Abrir el archivo y guardarlo con UTF8 hizo el truco. –

Cuestiones relacionadas