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