gpt4 book ai didi

ruby-on-rails - Gsub 提出 "invalid byte sequence in UTF-8"

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:06 26 4
gpt4 key购买 nike

我有下一个方法调用:

Formatting.git_log_to_html(`git log --no-merges master --pretty=full #{interval}`)

interval 的值类似于 release-20130325-01..release-20130327-04

git_log_to_html ruby​​ 方法是下一个(我只是粘贴引发错误的行):

module Formatting
def self.git_log_to_html(git_log)
...
git_log.gsub(/^commit /, "COMMIT_STARTcommit").split("COMMIT_STARTcommit").each do |commit|
...
end
end

这曾经有效,但实际上我检查过 gsub 引发了“UTF-8 中的无效字节序列”错误。

您能否帮助我理解为什么以及如何修复它? :/

这是 git_log 的输出:

https://dl.dropbox.com/u/42306424/output.txt

最佳答案

出于某种原因,这个命令:

git log --no-merges master --pretty=full #{interval}

给您的结果不是以 UTF-8 编码的,可能是您的计算机正在使用不同的字符集,请尝试以下操作:

module Formatting
def self.git_log_to_html(git_log)
...
git_log.force_encoding("utf8").gsub(/^commit /, "COMMIT_STARTcommit").split("COMMIT_STARTcommit").each do |commit|
...
end
end

我不确定这是否有效,但你可以试试。

如果这不起作用,您可以检查 ruby​​ iconv 以检测字符集并将其编码为 utf-8:http://www.ruby-doc.org/stdlib-2.0/libdoc/iconv/rdoc/


根据您在评论中添加的文件,我做了:

require 'open-uri'
content = open('https://dl.dropbox.com/u/42306424/output.txt').read
content.gsub(/^commit /, "COMMIT_STARTcommit").split("COMMIT_STARTcommit")

工作顺利,没有任何问题


顺便说一句,你可以试试:

require 'iconv'

module Formatting
def self.git_log_to_html(git_log)
...
git_log = Iconv.conv 'UTF-8', 'iso8859-1', git_log
git_log.gsub(/^commit /, "COMMIT_STARTcommit").split("COMMIT_STARTcommit").each do |commit|
...
end
end

但在尝试转换为 utf-8 之前,您应该真正检测字符串的字符集。

关于ruby-on-rails - Gsub 提出 "invalid byte sequence in UTF-8",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15728223/

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