code: function (bytes) {
  
      var str = "";
      var code, b1, b2, b3, b4, upper, lower;
      var i = 0;
  
      while (i < bytes.length) {
  
          b1 = bytes[i++];
  
          if (b1 < 0x80) {
              // 1 byte
              code = b1;
          } else if ((b1 >> 5) === 0x06) {
              // 2 bytes
              b2 = bytes[i++];
              code = ((b1 & 0x1f) << 6) | (b2 & 0x3f);
          } else if ((b1 >> 4) === 0x0e) {
              // 3 bytes
              b2 = bytes[i++];
              b3 = bytes[i++];
              code = ((b1 & 0x0f) << 12) | ((b2 & 0x3f) << 6) | (b3 & 0x3f);
          } else {
              // 4 bytes
              b2 = bytes[i++];
              b3 = bytes[i++];
              b4 = bytes[i++];
              code = ((b1 & 0x07) << 18) | ((b2 & 0x3f) << 12) | ((b3 & 0x3f) << 6) | (b4 & 0x3f);
          }
  
          if (code < 0x10000) {
              str += String.fromCharCode(code);
          } else {
              // surrogate pair
              code -= 0x10000;
              upper = (0xD800 | (code >> 10));
              lower = (0xDC00 | (code & 0x3FF));
              str += String.fromCharCode(upper, lower);
          }
      }
  
      return str;
  }
docs: Convert UTF-8 ArrayBuffer to String (UTF-16)
  
  @param {Array} bytes UTF-8 byte sequence to convert
  @return {String} String encoded by UTF-16