Json ответ в “неправильной кодировке” отображает русские символы

Rakzin Roman

Добрый день.

Json ответ в "неправильной кодировке" отображает русские символы. Если символы английские, то всё ок, а если кириллица, то такой вот вид:

[{"Id":"1","Fio":"Rakzin Roman"},{"Id":"2","Fio":"\u0418\u0432\u0430\u043d\u043e\u0432 \u0418\u0432\u0430\u043d \u0418\u0432\u0430\u043d\u043e\u0432\u0438\u0447"},{"Id":"3","Fio":"\u041f\u0435\u0442\u0440\u043e\u0432 \u041f\u0451\u0442\u0440 \u041f\u0435\u0442\u0440\u043e\u0432\u0438\u0447"},........

Php:

echo json_encode($this->Vipolnit_Zapros("Select Id,Fio from Students"));

Подскажите, что делать. Как убрать такие вот символы: \u0418? Хотя потом в JavaScript всё хорошо отображается, но хотелось бы это убрать.

Спасибо.

3 ответа

Rakzin Roman

Как убрать такие вот символы: \u0418? Хотя потом в JavaScript всё хорошо отображается, но хотелось бы это убрать.

Чтобы их убрать, используйте второй параметр функции json_encode():

json_encode($data, JSON_UNESCAPED_UNICODE);

JSON_UNESCAPED_UNICODE - Не кодировать многобайтные символы Unicode (по умолчанию они кодируются как \uXXXX). Доступно начиная с PHP 5.4.0.


Rakzin Roman

Всё нормально, "\u0418\u0432\u0430\u043d\u043e\u0432 \u0418\u0432\u0430\u043d \u0418\u0432\u0430\u043d\u043e\u0432\u0438\u0447" - это не "кодировка", а "коды символов юникода", записанные в восьмибитной кодировке, точнее записан текст "Иванов Иван Иванович".

В json данные записываются в ASCII 0-127. Всё, что не влезает, записывается как коды юникода ("\u0418\u0432\u0430\u043d\u043e\u0432" это "Иванов").


Rakzin Roman

Любой символ в json-строке может быть представлен в виде последовательности \uxxxx даже английские символы, например, "V" соответствует "\u0056". Не BMP символы (вне U+0000-U+FFFF) могут быть представлены в виде суррогатной пары UTF-16 (такой как "\ud83c\udf82" -- соответствует символу U+1F382 BIRTHDAY CAKE). Шестнадцатеричные цифры xxxx кодируют номер символа (Unicode codepoint).

JSON формат определён для Юникодного текста. При записи в файл, передачи по сети или другому байтовому интерфейсу может потребоваться закодировать этот текст как последовательность байтов, используя utf-8, utf-16, или utf-32 кодировки (кодировки рекомендованные rfc 7159).

\uxxxx последовательности позволяют сохранить json-текст, используя ascii кодировку. Чтобы оставить символы как есть, JSON_UNESCAPED_UNICODE можно использовать как @mantigatos предложил.

"V" и "\u0056" json строки декодируются json_decode() в один и тот же символ.

licensed under cc by-sa 3.0 with attribution.