JS生成中文二维码
来源:互联网 发布:1998年湖北数据 编辑:程序博客网 时间:2024/05/17 09:19
一、使用jquery-qrcode生成二维码
先简单说一下jquery-qrcode,这个开源的三方库(可以从https://github.com/jeromeetienne/jquery-qrcode 获取),
qrcode.js 是实现二维码数据计算的核心类,
jquery.qrcode.js 是把它用jquery方式封装起来的,用它来实现图形渲染,其实就是画图(支持canvas和table两种方式)
支持的功能主要有:
- text : "https://github.com/jeromeetienne/jquery-qrcode" //设置二维码内容
- render : "canvas",//设置渲染方式
- width : 256, //设置宽度
- height : 256, //设置高度
- typeNumber : -1, //计算模式
- correctLevel : QRErrorCorrectLevel.H,//纠错等级
- background : "#ffffff",//背景颜色
- foreground : "#000000" //前景颜色
使用方式非常简单
- jQuery('#output').qrcode({width:200,height:200,correctLevel:0,text:content});
经过简单实践,
使用canvas方式渲染性能还是非常不错的,但是如果用table方式,性能不太理想,特别是IE9以下的浏览器,所以需要自行优化一下渲染table的方式,这里就不细述了。
二、JS生成中文二维码
其实上面的js有一个小小的缺点,就是默认不支持中文。
这跟js的机制有关系,jquery-qrcode这个库是采用 charCodeAt() 这个方式进行编码转换的,
而这个方法默认会获取它的 Unicode 编码,一般的解码器都是采用UTF-8, ISO-8859-1等方式,
英文是没有问题,如果是中文,一般情况下Unicode是UTF-16实现,长度2位,而UTF-8编码是3位,这样二维码的编解码就不匹配了。
解决方式当然是,在二维码编码前把字符串转换成UTF-8,具体代码如下:
- function utf16to8(str) {
- var out, i, len, c;
- out = "";
- len = str.length;
- for(i = 0; i < len; i++) {
- c = str.charCodeAt(i);
- if ((c >= 0x0001) && (c <= 0x007F)) {
- out += str.charAt(i);
- } else if (c > 0x07FF) {
- out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
- out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
- out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
- } else {
- out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
- out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
- }
- }
- return out;
- }
原文鏈接:http://suflow.iteye.com/blog/1687396
0 0
- JS生成中文二维码
- JS生成二维码,支持中文字符
- JS生成二维码(兼容各种浏览器及中文)
- JS生成二维码(兼容各种浏览器及中文)
- js生成二维码插件
- js生成二维码
- js 生成二维码
- JS生成二维码
- JS生成二维码
- js生成二维码原理
- js生成二维码
- Js生成二维码
- js页面生成二维码
- js 生成二维码实例
- js实现生成二维码
- js生成二维码图片
- js生成二维码
- JS生成二维码
- 两个队列实现一个栈
- 学习笔记——自定义Button,自带监听EditText是否空
- 如何使用才能让缓存更高效
- servlet---知识点深化---重定向/转发/字节流字符流共存问题/多个servlet输出问题/请求包含
- 几个关于内存的问题
- JS生成中文二维码
- 如何获得升迁
- pull解析xml,可实现新闻解析、Android更新等
- PCB走线宽度和电流关系
- css技巧,如何设置select、radio 、 checkbox 、file这些不可直接设置的样式 。
- Move can only be called on an active agent that has been placed a Navmesh的解决办法
- 《开讲啦》观后感(互联网)
- C#中的Dictionary简介
- 情商决定了工作方面的成就