У меня есть json Мне нужно декодировать, изменять, а затем кодировать, не испорчая никаких символов.
Если у меня есть символ Юникода в строке json, он не будет декодироваться. Я не уверен, почему, поскольку json.org говорит, что строка может содержать: any-Unicode-character- except-"-or-\-or- control-character
. Но это также не работает в python.
{"Tag":"Odómetro"}
Я могу использовать utf8_encode, который позволит декодировать строку с помощью json_decode, однако персонаж попадает в нечто другое. Это результат print_r массива результатов. Два символа.
[Tag] => Odómetro
Когда я снова закодирую массив, персонаж сбежал в ascii, что верно в соответствии со спецификацией json:
"Tag"=>"Od\u00f3metro"
Есть ли способ избежать этого? json_encode не дает такой опции, utf8_encode тоже не работает.
Изменить. Я вижу, что для json_encode есть опция unescaped_unicode. Однако он работает не так, как ожидалось. О, черт, это только на php 5.4. Мне придется использовать некоторое регулярное выражение, поскольку у меня есть только 5.3.
$json = json_encode($array, JSON_UNESCAPED_UNICODE);
Warning: json_encode() expects parameter 2 to be long, string ...