Rails Rails 3.2,模板如果出错,出错代码附近的中文显示成了乱码,大家遇到过这样的情况吗

cqpx · 2011年12月20日 · 最后由 Psi 回复于 2012年02月04日 · 2642 次阅读

模板里写中文的附近如果有代码出错了,应该会显示类似这样的东西嘛:

Extracted source (around line #15):

12: 
13: %h2 汉字
15:   =lin_to image_tag(user.avatar.url)

升到 3.2 之后“汉字”部分就成乱码了...

然后我就发了一个 pull request 过去。。 我用 Rails 才 5 个月..给这种牛人云集的项目发 request 总有点心虚... 大家有这个情况吗?

这里 force_encoding('utf-8') 肯定是不对的,如果本身页面编码不是 utf-8 的,完全就乱码了。

是不是 3.2 在编码配置上有什么改变,这个可以看一下 change log.

支持! 但修改的这段代码好像逻辑不是很通 extract.force_encoding("UTF-8") if extract.respond_to?(:encode!)

http://ruby-doc.org/core-1.9.3/Object.html#method-i-respond_to-3F

respond_to?(symbol, include_private=false)
Returns true if obj responds to the given method. Private methods are included in the search only if the optional second parameter evaluates to true.

#1 楼 @Saito 代码我已经找到了啊,不是改进编码配置,就是一个 bug fix 引入的 https://github.com/rails/rails/pull/3816

他说的问题感觉我们怎么从来没遇到过。。这样的问题国内应用应该很常见。。

  • template contains utf-8 symbols near place where exception raised
  • request with post method with utf-8 parameters

不知道怎么改好。。再读读 rails 的代码。。

#3 楼 @cqpx 我尝试修复了一下,先 force_encoding(Encoding.default_internal) ,再进行 valid_encoding? 验证,不通过再进行 encode!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号