Hi! On 2/14/19 5:57 PM, Andrey Oktyabrskiy wrote: > Возможно ли в NJS получить строку > {"text":"\u0431\u0435\u043b\u0438\u0431\u0435\u0440\u0434\u0430"} > > из такого JSON'a > {"text":"белиберда"} > > JSON.parse прекрасно распознаёт такой JSON, а вот обратное > преобразование как сделать, не соображу никак. >
Ввиду особенностей работы njs со строками, немного не тривиально (для случая наличия смайликов в тексте и тп): $ cat unicode.js // @see http://www.json.org/JSON_checker/utf8_to_utf16.c var u8 = '\\u0444\\u044b\\u0432\\u0430 asdf \\ud83d\\udc4d'; var a16 = []; var enc = function(c) { return '\\u' + c.toString(16).padStart(4, '0'); }; for (var i = 0; i < u8.length; ++i) { var c = u8.codePointAt(i); if (c < 0x7f) { a16.push(u8[i]); } else if (c < 0x10000) { a16.push(enc(c)); } else { c -= 0x10000; a16.push(enc(0xd800 | (c >> 10))); a16.push(enc(0xdc00 | (c & 0x3ff))); } } var u16 = a16.join(''); console.log('encoded: ', u16); console.log('parsed: ', JSON.parse('"' + u16 + '"')); $ njs unicode.js 'encoded: ' '\\u0444\\u044b\\u0432\\u0430 asdf \\ud83d\\udc4d' 'parsed: ' 'фыва asdf 👍' wbr, Artem _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru