我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 项目源码 > jquery生成二维码源代码(案例演示)
总共48086条微博

动态微博

查看: 5300|回复: 12

jquery生成二维码源代码(案例演示)

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2015-04-22 21:31:59 |只看该作者 |倒序浏览
    2 h6 b3 c# K/ [% x! _1 ^' f' h
    # w! R9 O. I" o* `9 h" [
    演示地址:http://www.52itstyle.top/qrcode/index.html
    3 v" f7 k. v/ S5 N# t1 o. l; k  h. k. A: E0 Y: Z
    5 V) o8 M8 B9 I2 p7 F
    先简单说一下jquery-qrcode,这个开源的三方库(可以从https://github.com/jeromeetienne/jquery-qrcode 获取),
    * c" ]) o4 I' _8 v9 E! M7 Q
    ! n5 _! b4 h0 e3 lqrcode.js 是实现二维码数据计算的核心类,
    0 _: M7 T% b& E2 H/ P8 U# v  k& [2 n; t8 P- B
    jquery.qrcode.js 是把它用jquery方式封装起来的,用它来实现图形渲染,其实就是画图(支持canvas和image、table三种方式)。1 q! h( x' J* N
    ===============================================) `, o9 O5 {8 w; K% R& W" f
    JS生成中文二维码问题:
    4 ^- O( H' U- s& L* n5 p0 q其实上面的js有一个小小的缺点,就是默认不支持中文。7 p8 I  v( S0 l0 I7 i* j6 k
    " p' m' W8 {5 e, X! C
    这跟js的机制有关系,jquery-qrcode这个库是采用 charCodeAt() 这个方式进行编码转换的,, a+ l1 E, D4 P9 q- P( K
    ; j( w1 ~) I& w5 U
    而这个方法默认会获取它的 Unicode 编码,一般的解码器都是采用UTF-8, ISO-8859-1等方式,; r1 R3 T: ^4 J1 N
    , `+ j7 W# F/ _) P# c" ~! e# I+ y
    英文是没有问题,如果是中文,一般情况下Unicode是UTF-16实现,长度2位,而UTF-8编码是3位,这样二维码的编解码就不匹配了。
    ( y" w  o  p- f2 a
    " p! c, p# M- ]0 N$ K  S解决方式当然是,在二维码编码前把字符串转换成UTF-8,具体代码如下:
    & k/ l/ n1 N8 c+ q找到插件中以下代码:

    / A" ]: c/ z9 s2 _' B8 Q! |9 n
    1. qrcode.stringToBytes = function(s) {
      6 b/ b% O# @) A2 p
    2.    var bytes = new Array();  z; a8 z6 }# b' i; E4 k. z3 n
    3.    for (var i = 0; i < s.length; i += 1) {
      6 K! Q5 j3 V. v, h- A& L6 ~8 @3 o7 h
    4.       var c = s.charCodeAt(i);8 D/ E1 g4 a1 j( z
    5.       bytes.push(c & 0xff);& q0 j& U* V5 P2 y
    6.    }
      * N  W2 D+ B6 S) l  E  j) R9 ?
    7.   return bytes;
    复制代码
    加入中文编码:
    1. //中文转换2 k* i$ `! i" H' ^. [2 z) e1 `
    2.                 function utf16to8(str) {  6 Y+ K. l" K* p
    3.                         var out, i, len, c;  
      7 ^7 n' }8 N0 \( Y% }" P- _. R- i
    4.                         out = "";  % @8 P( ]; \4 a7 ~3 ]- t
    5.                         len = str.length;  
      # q) r1 B' s1 e9 Q
    6.                         for(i = 0; i < len; i++) {  # _4 D1 U9 y  ], r% P
    7.                         c = str.charCodeAt(i);  & B1 C: v) u6 E6 M0 W1 ?
    8.                         if ((c >= 0x0001) && (c <= 0x007F)) {  + c6 B( L6 x% r' E5 ^
    9.                                 out += str.charAt(i);  
      8 }- [# A8 O3 s7 {9 j# \
    10.                         } else if (c > 0x07FF) {  
      0 U! O+ `5 g# _3 g6 J
    11.                                 out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));  
      9 t9 G3 G/ [, B3 B. L
    12.                                 out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));  9 ~9 W1 X: _; ?% z0 z
    13.                                 out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));  
      + a$ M' o& @+ a
    14.                         } else {  
      ; s( `' a2 L& G! j1 N# q
    15.                                 out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));  / g9 r* A" Q* U  M4 _6 W$ l& ~' l( N
    16.                                 out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));  
      / Q0 I7 W- u0 p
    17.                         }  ' [- L3 l& [3 ^6 c: k1 W
    18.                         }  
      # ?7 M$ d# u/ B& }1 O+ ^8 W
    19.                         return out;  , p, A0 E6 a2 \
    20.                 }
    复制代码
    修改后:5 q+ K* Y  _6 M/ E: k' E3 W
    1.         qrcode.stringToBytes = function(s) {5 [6 m% R# [# d( D/ D8 ^/ N- A" E
    2.                     s=utf16to8(s);/ m% D- t4 p0 s6 j+ V3 ?
    3.                         var bytes = new Array();
      9 |, E  u* |/ R' s
    4.                         for (var i = 0; i < s.length; i += 1) {
      0 l3 V5 j  M* I1 J: k
    5.                                 var c = s.charCodeAt(i);/ S$ r: q' u9 ~6 b- w5 N6 Q- I8 D
    6.                                 bytes.push(c & 0xff);* Q. B% b  A0 e( I. l
    7.                         }9 w/ L7 r! q$ S& z/ i7 D. R
    8.                         return bytes;, J% T) g* }! y7 n! P3 F
    9.                 };
    复制代码
    中文乱码测试:2 c1 V1 @! R: N1 X% n

    ' N7 z7 l$ e% t( p. [4 m' B( Y$ D9 T, M; a! W
    4 u  k) J. |6 m
    , F2 Z( L3 A. ~3 {* U& r( O2 \

    ' a  f& i$ t8 x; G% U$ a; q7 F; Z" G; d+ H& P; a
    演示样例:
    4 n6 n4 o0 ~  z7 [
    " ]0 s, n$ V& D$ K5 H

    & i" B& W* F1 E8 L9 y2 R9 H- v3 b$ n0 A% b  ?  w7 w: U$ ?  t) U
    百度网盘下载地址.zip (225 Bytes, 下载次数: 4, 售价: 5 IT币)
    , Z) @4 K, [0 ~# V
    7 P6 l* @  y, k- S' q

    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    45

    主题

    5

    听众

    119

    金钱

    三袋弟子

    该用户从未签到

    沙发
    发表于 2015-04-23 17:27:18 |只看该作者
    不错 功能 很多         
    回复

    使用道具 举报

    3

    主题

    1

    听众

    122

    金钱

    四袋长老

    该用户从未签到

    板凳
    发表于 2015-05-14 00:28:28 |只看该作者
    终于可以回复了
    回复

    使用道具 举报

    28

    主题

    1

    听众

    432

    金钱

    四袋长老

    该用户从未签到

    地板
    发表于 2016-04-19 16:53:27 |只看该作者
    好好学习,我会努力,加油!
    回复

    使用道具 举报

    2

    主题

    0

    听众

    289

    金钱

    五袋长老

    该用户从未签到

    5#
    发表于 2016-05-05 15:27:51 |只看该作者

    ' Z4 X/ d" h! R( Q. T资源有点让我小激动呢
    回复

    使用道具 举报

    2

    主题

    0

    听众

    289

    金钱

    五袋长老

    该用户从未签到

    6#
    发表于 2016-05-05 15:28:02 |只看该作者

    9 z8 j% p# q1 N2 e; [+ v资源有点让我小激动呢
    回复

    使用道具 举报

    2

    主题

    0

    听众

    289

    金钱

    五袋长老

    该用户从未签到

    7#
    发表于 2016-05-05 15:28:11 |只看该作者

    7 k" f& _9 v" X( V' G* q, k资源有点让我小激动呢
    回复

    使用道具 举报

    2

    主题

    0

    听众

    289

    金钱

    五袋长老

    该用户从未签到

    8#
    发表于 2016-05-05 15:28:22 |只看该作者
    不错 功能 很多   
    回复

    使用道具 举报

    2

    主题

    0

    听众

    289

    金钱

    五袋长老

    该用户从未签到

    9#
    发表于 2016-05-05 15:28:47 |只看该作者
    不错 功能 很多   
    回复

    使用道具 举报

    2

    主题

    0

    听众

    289

    金钱

    五袋长老

    该用户从未签到

    10#
    发表于 2016-05-05 15:28:58 |只看该作者
    不错 功能 很多   
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表