Ruby markdown.rb 的中文转化乱码

iceskysl · 2014年03月29日 · 最后由 rco 回复于 2014年03月29日 · 4885 次阅读

恩,就是这个文件 https://github.com/ruby-china/ruby-china/blob/master/lib/markdown.rb

本地 mac 环境跑起来没啥问题,但是生产服务器上一旦出现 #1 楼 或者 @中文 的时候就会乱码~

补充: 数据存在 Mongodb 里的~

如下

2.0.0-p353 :002 > r =  Reply.last
2.0.0-p353 :004 > r.body
 => "#18楼 @iceskysl 测试乱码~~" 

2.0.0-p353 :005 > html = MarkdownTopicConverter.format(r.body)
 => "<p><a href=\"#reply18\" class=\"at_floor\" data-floor=\"18\">#18楼</a> <a href=\"/iceskysl\" class=\"at_user\" title=\"@iceskysl\"><i>@</i>iceskysl</a> æµÂ\u008Bè¯Â\u0095ä¹±ç Â\u0081~~</p>" 

我把那段提出来直接在 irb 里测试是 ok 的,如下

2.0.0-p353 :006 > content = "#18楼 @iceskysl 测试乱码~~"
 => "#18楼 @iceskysl 测试乱码~~" 

2.0.0-p353 :007 > html = content.gsub(/#(\d+)([楼樓Ff])/) {
2.0.0-p353 :008 >       %(<a href="#reply#{$1}" class="at_floor" data-floor="#{$1}">##{$1}#{$2}</a>)
2.0.0-p353 :009?>   }
 => "<a href=\"#reply18\" class=\"at_floor\" data-floor=\"18\">#18楼</a> @iceskysl 测试乱码~~" 

2.0.0-p353 :010 > puts html
<a href="#reply18" class="at_floor" data-floor="18">#18楼</a> @iceskysl 测试乱码~~

服务器环境

[root@i-p0z03ogo ~]# ruby -v
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]

[root@i-p0z03ogo ~]# rails -v
Rails 4.0.1

何解?

线上 mysql 的字符集编码问题?

乱猜一下: 试试把 100 到 102 行 关起来,

#link_mention_floor(doc)
#link_mention_user(doc, users)
#replace_emoji(doc)

看是不是就不会有乱码,然后再一个一个打开看是哪个方法是哪个造成。 如果都还是会有乱码,那就可能是 99 行 nokogiri 造成的, doc = Nokogiri::HTML.fragment(result) 以前曾经透过比较旧 Nokogiri 的版本,中文会有乱码的问题。

#3 楼 @rco 直接发不带@#,是没乱码的~

#3 楼 @rco 啊哈,还真是这个 Nokogiri 版本的问题,原来 1.5.6 的版本,更新到最新的 1.6.1 的版本后,没问题了~ thx~

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