2016-01-28 57 views
2

我在收集()方法調用得到UnmappableCharacterException(或在toList()調用):獲得 「java.nio.charset.UnmappableCharacterException:輸入長度= 1」

​​

它爲我曾經,但從那以後從未。

我讀的文件是在solaris上創建的csv文件。我在Windows 2012服務器上運行罐子

請問您能提供建議嗎?

謝謝。

+2

不要使用' Charset.defaultCharset()'如果你已經知道這些文件來自不同的系統,最有可能具有不同的字符集。如果Solaris上的軟件在其中一個窗口編碼中創建文件,我會非常驚訝。 – Holger

+0

@Holger那麼,我應該把那裏當作字符集呢? – dushkin

+1

[什麼是字符編碼,爲什麼我應該打擾它]可能的重複(http://stackoverflow.com/questions/10611455/what-is-character-encoding-and-why-should-i-bother-with-它) – Raedwald

回答

4

我讀的文件是在solaris上創建的csv文件。我在Windows 2012服務器上運行罐子

那麼這可能是問題。您正在使用平臺默認編碼來讀取和寫入文件。如果這些文件是在Solaris上創建的,那麼很可能在Windows中有一個不同的平臺默認編碼。

如果您知道正在閱讀的文件的編碼,請指定該編碼。

如果你得到控制你正在閱讀和編寫的文件的編碼,我強烈建議使用UTF-8,除非你有一個非常好的理由不要。

只有使用Charset.default()如果你正在讀你知道文件使用平臺的默認編碼,或者如果你正在寫你肯定使用平臺的默認編碼文件 - 並儘量避免後者。

(基本上,這裏的一切都在UTF-8是一個簡單的世界編碼的世界......)

+0

有沒有一種方法可以強制文件是utf-8? – dushkin

+2

@dushkin:目前還不清楚你的意思。基本上,文件只是一個字節序列。任何能夠創建文件的東西都可以創建它想要的任何順序。我們不知道什麼是創建輸入文件的開始......您應該先看看。 –

1

老實說,我也不知道這是一個答案,但我想幫助。我有同樣的問題,使用:

val source = io.Source.fromFile("C:/mon_usatotaldat.csv").codec.decodingReplaceWith("UTF-8") 

而且我得到的輸出:

來源:scala.io.Codec =窗口1252