0

私はscalaでファイルを読んでいます

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

これは、scala ファイルでは問題なく機能します。ただし、txt ファイルでは、すべての文字の間にスペースが追加されます。例えば。私は.txtファイルを読み込んで、これを取得します:

Call Event Log ( Error $ 、 Err Num 、 Err O bj )

' End Errorhandlingblock .

End サブ

プログラムの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ですが、Codecにを渡すfromFileか、エンコーディングを文字列として指定できます。

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

確かなことはわかりませんが、2 つのファイルが異なるエンコーディングで書かれているようです。任意の Unix システム (Mac を含む) では、コマンドodを使用してファイル内の実際のバイトを確認できます。

UTF-8 はほとんどのシステムで通常のテキスト ファイルの標準ですが、UTF-8 と UTF-16 が混在している場合は、どのファイルにどのエンコーディングを使用するかを把握し、エンコーディングを正しく指定する必要があります。

または、ファイルを作成するときは、ファイルがすべて同じ形式になるように注意してください。

于 2012-08-07T13:49:48.317 に答える