2011-08-20 29 views
8

該文件是在這裏爲什麼Scala在閱讀我的CSV時崩潰?

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中。我認爲這是某種類型的編碼問題,但我不知道變通

回答

29

我想嘗試的ISO8859_1編碼,或者如果的Cp1252不工作,像這樣:

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

你可以請參閱Sun Java支持的編碼here。我忘了你是否應該使用nio或io版本。 (正如你可以從我的答案中看到的,它已經使用了兩者)。

+1

UTF16訣竅 – deltanovember

+0

我剛剛得到了同樣的錯誤,並解決了它! –

+0

我有同樣的問題。使用UTF8打開文件並保存它是有用的。 –