browse by category or date

Long time ago, Konstantin reported that the output of JSON Table editor is in encoded format (Unicode-escape character). For example, if the input is:

{ 
   id: 0, 
   text: 'Привет', 
   translation: 'Hi' 
}

The output will be:

{ 
   "id": 0, 
   "text": "\u041f\u0440\u0438\u0432\u0435\u0442", 
   "translation": "Hi" 
}

Thanks to Mathias Bynens’ great article on Javascript problem with unicode, I can fix this problem.

First, we need to ensure that method String.FromCodePoint is available. Some browsers like IE and Safari didn’t have this method. Thus we need create the polyfills:

/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
if (!String.fromCodePoint) {
  (function() {
    var defineProperty = (function() {
      // IE 8 only supports `Object.defineProperty` on DOM elements
      try {
        var object = {};
        var $defineProperty = Object.defineProperty;
        var result = $defineProperty(object, object, object) && $defineProperty;
      } catch(error) {}
      return result;
    }());
    var stringFromCharCode = String.fromCharCode;
    var floor = Math.floor;
    var fromCodePoint = function() {
      var MAX_SIZE = 0x4000;
      var codeUnits = [];
      var highSurrogate;
      var lowSurrogate;
      var index = -1;
      var length = arguments.length;
      if (!length) {
        return '';
      }
      var result = '';
      while (++index < length) {
        var codePoint = Number(arguments[index]);
        if (
          !isFinite(codePoint) ||       // `NaN`, `+Infinity`, or `-Infinity`
          codePoint < 0 ||              // not a valid Unicode code point
          codePoint > 0x10FFFF ||       // not a valid Unicode code point
          floor(codePoint) != codePoint // not an integer
        ) {
          throw RangeError('Invalid code point: ' + codePoint);
        }
        if (codePoint <= 0xFFFF) { // BMP code point
          codeUnits.push(codePoint);
        } else { // Astral code point; split in surrogate halves
          // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
          codePoint -= 0x10000;
          highSurrogate = (codePoint >> 10) + 0xD800;
          lowSurrogate = (codePoint % 0x400) + 0xDC00;
          codeUnits.push(highSurrogate, lowSurrogate);
        }
        if (index + 1 == length || codeUnits.length > MAX_SIZE) {
          result += stringFromCharCode.apply(null, codeUnits);
          codeUnits.length = 0;
        }
      }
      return result;
    };
    if (defineProperty) {
      defineProperty(String, 'fromCodePoint', {
        'value': fromCodePoint,
        'configurable': true,
        'writable': true
      });
    } else {
      String.fromCodePoint = fromCodePoint;
    }
  }());
}

Now we can use this function to replace any instance of unicode escape character.

str = str.replace(/\\u([a-fA-F0-9]{1,6})/g, 
         function (e, n) {
	    var t = parseInt(n, 16);
	    return String.fromCodePoint(t);
});

That’s it guys. So happy that 2-years old bug is finally fixed 😀 Cheers!

GD Star Rating
a WordPress rating system
Bug Fix: JSON Table Editor's Output Is In Unicode Escape Character, 5.0 out of 5 based on 2 ratings

Possibly relevant:

About Hardono

Howdy! I'm Hardono. I am working as a Software Developer. I am working mostly in Windows, dealing with .NET, conversing in C#. But I know a bit of Linux, mainly because I need to keep this blog operational. I've been working in Logistics/Transport industry for more than 11 years.

Incoming Search

bugs, extjs, javascript, json

No Comment

Add Your Comment