我正在使用
在scala中读取文件def fileToString(that:String):String= {
var x:String=""
for(line <- Source.fromFile(that).getLines){
x += line + "\n"
}
x
}
这适用于scala文件。但是在txt文件中,它会在每个字符之间添加空格。例如。我读了一个.txt文件并得到了这个:
C e l l E v e n t L o g(E r r o r $,E r r N u m,E r r O b j)
'E n d E r r o r a n d l i n g b l o c k。
E n d S u b
我在scala文件中读到该程序,它正常出现
编辑:这似乎与编码有关。当我将其更改为UTF-16时,它会读取.txt文件,但不会读取scala文件。有没有办法让它普遍起作用?
答案 0 :(得分:5)
不,它不适用于所有文件。要读取/解释文件/数据,您需要知道格式/编码,除非您将其视为二进制blob。
以通常的unicode格式(UTF-8)保存所有文件或在读取文件时指定编码。
FromFile
采用隐式编解码器,您可以明确地传递它。
io.Source.fromFile("123.txt")(io.Codec("UTF-16"))
答案 1 :(得分:1)
通常,如果您从文件中读取,则需要知道其编码才能正确读取字符。我不确定Scala假设的默认编码是什么,可能是UTF8,但您可以将Codec
传递给fromFile
,或者将编码指定为字符串:
io.Source.fromFile("file.txt", "utf-8")
答案 2 :(得分:0)
很难确定,但听起来这两个文件是用不同的编码编写的。在任何Unix系统(包括Mac)上,您都可以使用命令od
查看文件中的实际字节。
UTF-8是大多数系统上普通文本文件的标准,但如果您混合使用UTF-8和UTF-16,则必须知道哪些编码用于哪些文件并正确指定编码
或者在创建文件时要更加小心,以确保它们的格式相同。