0

我正在使用 scala 读取文件

def fileToString(that:String):String= {
    var x:String="" 
    for(line <- Source.fromFile(that).getLines){ 
        x += line + "\n"
    }
  x
  }

这适用于 scala 文件。但是在 txt 文件中,它会在每个字符之间添加空格。例如。我读了一个 .txt 文件并得到了这个:

C 所有事件日志 (E rror $ , E rr N um , E rr O bj )

' 结束错误处理块。

结束订阅

我读入了程序的scala文件,它正常出现

编辑:这似乎与编码有关。当我将其更改为 UTF-16 时,它会读取 .txt 文件,而不是 scala 文件。有没有办法让它普遍工作?

4

3 回答 3

5

不,它不适用于所有文件。要读取/解释文件/数据,您需要知道格式/编码,除非您将其视为二进制 blob。

以通常的 unicode 格式 (UTF-8) 保存所有文件,或者在读取文件时指定编码。
FromFile采用隐式编解码器,您可以显式传递它。

io.Source.fromFile("123.txt")(io.Codec("UTF-16"))
于 2012-08-07T13:46:05.457 回答
1

通常,如果您从文件中读取,则需要知道其编码才能正确读取字符。我不确定 Scala 假定的默认编码是什么,可能是 UTF8,但您可以将 a 传递CodecfromFile,或将编码指定为字符串:

io.Source.fromFile("file.txt", "utf-8")
于 2012-08-07T13:49:07.497 回答
0

很难确定,但听起来这两个文件是用不同的编码编写的。在任何 Unix 系统(包括 Mac)上,您都可以使用该命令od查看文件中的实际字节。

UTF-8 是大多数系统上普通文本文件的标准,但如果您混合使用 UTF-8 和 UTF-16,则必须知道对哪些文件使用哪种编码并正确指定编码。

或者在创建文件时要更加小心,以确保它们都采用相同的格式。

于 2012-08-07T13:49:48.317 回答