【JavaScript】【QR Code】使用jquery-qrcode插件显示含中文的二维码

虽然按照使用jquery-qrcode生成二维码写上去了,但是还是乱码。
后来把页面文件的编码格式改成utf8之后,再刷新二维码就对了。

另外在github上还找到了另外一种实现方法(也要改文件的编码格式):https://github.com/jeromeetienne/jquery-qrcode/issues/13

顺便吐槽下Sublime Text的国际化支持,实在是太挫了.有中文字符时不知道保存成啥格式了,浪费了大半天时间.

方法1

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;
}

jQuery(function(){
    jQuery('#output').qrcode(
        {
            correctLevel:0,
            //text:utf16to8("MECARD:rnN:姓名;rnTEL:电话号码;rnEMAIL:邮箱;rn;")
            text:utf16to8("BEGIN:VCARDrnVERSION:3.0rnN:姓名;rnTEL;TYPE=WORD,VOICE,PREF,MSG:电话号码rnEMAIL;TYPE=PREF,INTERNET:邮箱rnEND:VCARD")
        }
    );
});

方法2

var _countBits = function(_c) {
    var cnt = 0;
    while(_c > 0) {
        cnt++;
        _c = _c >>> 1;
    }
    return cnt;
};
function UnicodeToUtf8Bytes2(code) {
        if ((code == null) || (code < 0) ||
        (code > (Math.pow(2, 31) -1))) {
        return ["?".charCodeAt(0)];
    }
    if (code < 0x80) {
        return
;
    }
    var arr = ;
    while ((code >>> 6) > 0) {
        arr.push(0x80 | (code & 0x3F));
        code = code >>> 6;
    }
    if ((arr.length + 2 + (_countBits(code))) > 8) {
        arr.push(0x80 | code);
        code = 0;
    }
    var pre = 0x80;
    for (var i = 0; i < arr.length; i++) {
      pre |= (0x80 >>> (i + 1));
    }
    arr.push(pre | code);
    return arr.reverse();
}

QR8bitByte.prototype.getLength = function(buffer) {
  var len = 0;
  for (var i = 0; i < this.data.length; i++) {
    var bytes = UnicodeToUtf8Bytes2(this.data.charCodeAt(i));
    len += bytes.length;
  }
  return len;
};

QR8bitByte.prototype.write = function(buffer) {
  for (var i = 0; i < this.data.length; i++) {
    var bytes = UnicodeToUtf8Bytes2(this.data.charCodeAt(i));
    for (var x = 0; x < bytes.length; x++) {
      buffer.put(bytes[x], 8);
    }
  }
};

© 2016 – 2018, 佳佳. 版权所有. 转载请注明出处.

发表评论

电子邮件地址不会被公开。 必填项已用*标注