【问题标题】:Scala file reading adding spacesScala文件读取添加空格
【发布时间】:2012-08-07 13:06:45
【问题描述】:

我正在使用 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 文件。有没有办法让它普遍工作?

【问题讨论】:

    标签: scala io


    【解决方案1】:

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

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

    io.Source.fromFile("123.txt")(io.Codec("UTF-16"))
    

    【讨论】:

      【解决方案2】:

      一般来说,如果您从文件中读取,您需要知道其编码才能正确读取字符。我不确定 Scala 假定的默认编码是什么,可能是 UTF8,但您可以将 Codec 传递给 fromFile,或者将编码指定为字符串:

      io.Source.fromFile("file.txt", "utf-8")
      

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2012-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多