UTF-8のコーディングに問題があります。私はここでいくつかの投稿を読みましたが、それでもどういうわけか正しく機能しません。
それが私のコードです:
#!/bin/env ruby
#encoding: utf-8
def determine
file=File.open("/home/lala.txt")
file.each do |line|
puts(line)
type = line.match(/DOG/)
puts('aaaaa')
if type != nil
puts(type[0])
break
end
end
end
それが私のファイルの最初の3行です:
;?lalalalal60000065535-1362490443-0000006334-0000018467-0000000041en-lalalalallalalalalalalalaln Cell Generation
text/lalalalala1.0.0.1515
text/lalalala�DOG
このコードを実行すると、ファイルの3行目(dogという単語が立っている場所)を読み取るときにエラーが表示されます。
;?lalalalal60000065535-1362490443-0000006334-0000018467-0000000041en-lalalalallalalalalalalalaln Cell Generation
aaaaa
text/lalalalala1.0.0.1515
aaaaa
text/lalalala�DOG
/home/kik/Desktop/determine2.rb:16:in `match': invalid byte sequence in UTF-8 (ArgumentError)
しかし、私がaaを実行した場合、次の内容の関数を決定します。
#!/bin/env ruby
#encoding: utf-8
def determine
type="text/lalalala�DOG".match(/DOG/)
puts(type)
end
それは完璧に動作します。
そこで何が問題になっていますか?前もって感謝します!
編集:ファイルの3行目は次のとおりです。
text/lalalal»DOG
しかし、ファイルの3行目をルビーで印刷すると、次のように表示されます。
text/lalalala�DOG
EDIT2:
このフォーマットは、ローカリゼーションをサポートするためにも開発されました。ファイル内に保存されている文字列は、2バイトのUNICODE文字として保存されます。ファイルの形式は、データがネットワークバイトオーダー(ビッグエンディアン形式)で保存されているバイナリファイルです。