格苏布提高"invalid byte sequence in UTF-8"



我有下一个方法调用:

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之前,您应该真正检测字符串的字符集

相关内容

  • 没有找到相关文章

最新更新