2016-01-28 19 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