UNPKG

react-qrcode-component

Version:

react qrcode qr.js

41 lines (36 loc) 1.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertStr = convertStr; // Convert from UTF-16, forcing the use of byte-mode encoding in our QR Code. // This allows us to encode Hanji, Kanji, emoji, etc. Ideally we'd do more // detection and not resort to byte-mode if possible, but we're trading off // a smaller library for a smaller amount of data we can potentially encode. // Based on http://jonisalonen.com/2012/from-utf-16-to-utf-8-in-javascript/ function convertStr(str) { var out = ''; for (var i = 0; i < str.length; i++) { var charcode = str.charCodeAt(i); if (charcode < 0x0080) { out += String.fromCharCode(charcode); } else if (charcode < 0x0800) { out += String.fromCharCode(0xc0 | charcode >> 6); out += String.fromCharCode(0x80 | charcode & 0x3f); } else if (charcode < 0xd800 || charcode >= 0xe000) { out += String.fromCharCode(0xe0 | charcode >> 12); out += String.fromCharCode(0x80 | charcode >> 6 & 0x3f); out += String.fromCharCode(0x80 | charcode & 0x3f); } else { // This is a surrogate pair, so we'll reconsitute the pieces and work // from that i++; charcode = 0x10000 + ((charcode & 0x3ff) << 10 | str.charCodeAt(i) & 0x3ff); out += String.fromCharCode(0xf0 | charcode >> 18); out += String.fromCharCode(0x80 | charcode >> 12 & 0x3f); out += String.fromCharCode(0x80 | charcode >> 6 & 0x3f); out += String.fromCharCode(0x80 | charcode & 0x3f); } } return out; }