新手问题 RQRCode 二维码遇到中文显示乱码问题。

hi54yt · 2012年12月13日 · 最后由 nswish 回复于 2014年09月23日 · 13526 次阅读

text 传入英文正常,中文就扫描不出来或者扫出来的是乱码。 controller 和 view 代码片段:

# coding: utf-8 
 def print
    require 'rqrcode'
      text = "你好"
      @qr = RQRCode::QRCode.new(text, :size =>10, :level => :h,:unit => 10,:offset=>10)
      respond_to  do |format|
          format.html{render :layout=>false}
          format.pdf{render :layout=>false}
      end
  end
<table class="fwimg" border="0" cellspacing="0" cellpadding="0">
<% @user2x do |x| %>
<tr> 
    <% @user3x do |y| %>
    <% if @qr.dark?(x,y) %>
    <td class="black"/>
        <% else %>
        <td class="white"/>
     <% end %>
     <% end %>
</tr>
<% end %>
</table>

https://github.com/whomwah/rqrcode/issues/3 看这个 Issues,临时改成 CP852 编码解决了。

还有没有人给个建设性的意见?

简单活可以直接用 js 解决,

二维码里面保存的 中文 需要转码至 utf-8,当然部分国内转的是 gbk。 #2 楼 @hi54yt

那个 Issues 里提到,这个 gem 在 ruby1.92 和 utf-8 编码会出现兼容问题,在 ruby1.8 下没有问题,所以转成其他编码 CP852 就可以了,内部编码原理还没研究过

6 楼 已删除
7 楼 已删除
8 楼 已删除
9 楼 已删除
10 楼 已删除
11 楼 已删除
12 楼 已删除

我看了一下 issue 中的回复,也看了 qr_8bit_byte.rb 的源码。作者实际意图是逐个字节的去分析传入的字符串,并把它们作为 ASCII 码来对待,得到在 ASCII 码中的位置。但是作者使用了 string 的 [] 方法,导致无法兼容 1.9.2 以后的版本,因为后续版本 [] 方法得到的是一个字符而不是字节。 因为 cp852 是 ascii 码的 8 位扩展编码,强行更改字符串的编码为 cp852 后,巧妙的解决了这个问题。既能够让 ruby 按照每个字符像字节一样的迭代,也满足了作者在算法上需要得到字节的 ASCII 位置的需要。 其实 cp852 也不是唯一的编码解决方案,理论上来说,只要是欧洲的 ASCII 扩展码体系,应该都适用。或者直接使用 Ruby 的 ASCII-8BIT 编码也可以。

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