ruby,`match':UTF-8中的无效字节序列

Ali*_*ina 7 ruby utf-8

我有一些UTF-8 conding的问题.我在这里阅读了一些帖子,但它仍然无法以某种方式正常工作.

那是我的代码:

#!/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
Run Code Online (Sandbox Code Playgroud)

这是我文件的前3行:

;?lalalalal60000065535-1362490443-0000006334-0000018467-0000000041en-lalalalallalalalalalalalaln Cell Generation
text/lalalalala1.0.0.1515
text/lalalala?DOG
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,它会在读取文件的第三行(单词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)
Run Code Online (Sandbox Code Playgroud)

但是:如果我只使用以下内容运行aa确定函数:

#!/bin/env ruby
#encoding: utf-8

    def determine
    type="text/lalalala?DOG".match(/DOG/)
    puts(type)
end
Run Code Online (Sandbox Code Playgroud)

它完美地运作.

那里出了什么问题?提前致谢!

编辑:文件中的第三行是:

text/lalalal»DOG
Run Code Online (Sandbox Code Playgroud)

但是当我在ruby中打印文件的thirf行时,它显示如下:

text/lalalala?DOG
Run Code Online (Sandbox Code Playgroud)

EDIT2:

此格式也是为了支持本地化而开发的.存储在文件中的字符串存储为2字节UNICODE字符.文件格式为二进制文件,数据以网络字节顺序(big-endian格式)存储.

Ama*_*dan 1

尝试使用这个:

File.open("/home/lala.txt", "r:UTF-8")
Run Code Online (Sandbox Code Playgroud)

在某些阶段使用错误的编码似乎存在问题。#encoding :utf仅指定源文件的编码,这会影响文字字符串的解释方式,并且对File.open使用的编码没有影响。