3

次のメソッド呼び出しがあります。

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

の値intervalは のようなものrelease-20130325-01..release-20130327-04です。

git_log_to_htmlruby メソッドは次のとおりです (エラーが発生する行のみを貼り付けています) 。

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

4

1 に答える 1

3

何らかの理由で、このコマンド:

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 への変換を試みる前に、文字列の文字セットを実際に検出する必要があります。

于 2013-03-31T10:03:25.117 に答える