gpt4 book ai didi

ruby , `match' : invalid byte sequence in UTF-8

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:32 26 4
gpt4 key购买 nike

我对 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:

This format was also developed to support localization. Strings stored within the file are stored as 2 byte UNICODE characters.The format of the file is a binary file with data stored in network byte order (big-endian format).

最佳答案

我相信@Amadan 很接近,但倒退了。我会这样做:

File.open("/home/lala.txt", "r:ASCII-8BIT")

该字符不是有效的 UTF-8,但出于您的目的,8 位 ASCII 似乎可以正常工作。我的理解是,当您只使用字符串时,Ruby 默认使用该编码,这就是它起作用的原因。

更新:根据您最近的评论,这听起来像是您需要的:

File.open("/home/lala.txt", "rb:UTF-16BE")

关于 ruby , `match' : invalid byte sequence in UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com