On 14.02.2019 22:41, Artem S. Povalyukhin wrote:
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 👍'
Спасибо.
Смайликов точно не будет. Только печатные символы.
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru