Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function (win, undef) {
- var encodeMap = {
- '\0': '0',
- '\b': 'b',
- '\t': 't',
- '\n': 'n',
- '\v': 'v',
- '\f': 'f',
- '\r': 'r',
- '"': '"',
- "'": "'",
- '\\': '\\'
- };
- var decodeMap = {};
- for (var p in encodeMap) {
- decodeMap[encodeMap[p]] = p;
- }
- win.encodeUnicode = function (s) {
- var re = /[^\x20\x21\x23-\x26\x28-\x5b\x5d-\x7e]/g;
- return s.replace(re, function (c) {
- if (c in encodeMap) {
- return '\\' + encodeMap[c];
- }
- c = c.charCodeAt(0);
- if (c < 128) {
- return '\\x' + (c < 16 ? '0' : '') + c.toString(16);
- }
- return '\\u' + ('000' + c.toString(16)).slice(-4);
- });
- };
- win.decodeUnicode = function (s) {
- var re = /\\((?:[1-7][0-7]{0,2}|[0-7]{2,3}))|\\x([\da-f]{2})|\\u([\da-f]{4})|\\(.)/gi;
- return s.replace(re, function (_, o, h, u, c) {
- // console.log(arguments);
- if (o !== undef) return String.fromCharCode(parseInt(o, 8));
- if (h !== undef) return String.fromCharCode(parseInt(h, 16));
- if (u !== undef) return String.fromCharCode(parseInt(u, 16));
- if ('xXuU'.indexOf(c) != -1) throw new Error('bad sequence');
- if (c in decodeMap) return decodeMap[c];
- return c;
- });
- };
- win.testEncoder = function () {
- assert(decodeUnicode('\\0') === '\0');
- assert(decodeUnicode('\\b') === '\b');
- assert(decodeUnicode('\\t') === '\t');
- assert(decodeUnicode('\\n') === '\n');
- assert(decodeUnicode('\\v') === '\v');
- assert(decodeUnicode('\\f') === '\f');
- assert(decodeUnicode('\\r') === '\r');
- assert(decodeUnicode('\\"') === '"');
- assert(decodeUnicode('\\\'') === '\'');
- assert(decodeUnicode('\\\\') === '\\');
- assert(decodeUnicode('\\xff') === '\xff');
- assert(decodeUnicode('\\100') === '\100');
- assert(decodeUnicode('\\u0100') === '\u0100');
- console.log('ok');
- };
- })(window);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement