日志中的ASCII-8bit到UTF-8编码转换错误

我在日志中看到此警告,不确定它来自哪里。以前从未见过,在从 3.2.0 升级到 3.3.0 后开始出现。

它是时间戳周围唯一的警告,没有其他错误/警告(最初以为与电子邮件有关,但未在此时段看到任何错误或退回的电子邮件)。

已安装

3.3.0.beta2-dev

(777b8f6d51)

消息(报告 4 次)

RequestTracker.get_data 失败 : Encoding::UndefinedConversionError : 从 ASCII-8BIT 到 UTF-8 的“\\xA1”转换

回溯

/var/www/discourse/lib/middleware/request_tracker.rb:190:in `encode'
/var/www/discourse/lib/middleware/request_tracker.rb:190:in `get_data'
/var/www/discourse/lib/middleware/request_tracker.rb:207:in `log_request_info'
/var/www/discourse/lib/middleware/request_tracker.rb:320:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.1/lib/rails/engine.rb:530:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.1/lib/rails/railtie.rb:226:in `public_send'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.1/lib/rails/railtie.rb:226:in `method_missing'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-2.2.9/lib/rack/urlmap.rb:74:in `block in call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-2.2.9/lib/rack/urlmap.rb:58:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-2.2.9/lib/rack/urlmap.rb:58:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'

似乎有一个特定的网络爬虫有问题;这不应该影响到您。 :thinking:

这里,爬虫用户代理在编码为 UTF-8 时存在问题,因为它包含一个无效字节。
scrub 应该能做到这一点。也许使用 :undef 参数会有帮助:
user_agent.encode("utf-8", :undef => :replace)

image

[51] pry(main)> string = "hello \xa1\x28world\x29".force_encoding("ASCII-8BIT")
=> "hello \xA1(world)"
[52] pry(main)> string.encode('utf-8')
Encoding::UndefinedConversionError: "\xA1" from ASCII-8BIT to UTF-8
from (pry):52:in `encode'
[53] pry(main)> string.encode('utf-8', :undef => :replace)
=> "hello �(world)"
4 个赞

看起来不错,提交一个 PR?

2 个赞

已合并修复程序。:+1:

4 个赞

干得好!:clap: :smiley: :dragon:

2 个赞

此主题已在 3 天后自动关闭。不再允许回复。