我对 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
当我运行此代码时,它会在读取文件的第三行(单词 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)
但是:如果我只运行具有以下内容的确定函数:
#!/bin/env ruby
#encoding: utf-8
def determine
type="text/lalalala�DOG".match(/DOG/)
puts(type)
end
它完美地工作。
那里出了什么问题?提前致谢!
编辑:文件中的第三行是:
text/lalalal»DOG
但是当我在 ruby 中打印文件的第三行时,它显示如下:
text/lalalala�DOG
编辑2:
这种格式也是为了支持本地化而开发的。存储在文件中的字符串存储为 2 字节的 UNICODE 字符。文件的格式是二进制文件,数据以网络字节顺序(大端格式)存储。