utf8 print json_encode ejemplo php json unicode character-encoding

print - string to json php



Descodificación y codificación PHP json con caracteres Unicode (7)

A juzgar por todo lo que ha dicho, parece que la cadena Odómetro original Odómetro que está tratando está codificada con ISO 8859-1, no con UTF-8.

He aquí por qué creo que sí:

  • json_encode produjo una salida parseable después de ejecutar la cadena de entrada a través de utf8_encode , que convierte de ISO 8859-1 a UTF-8.
  • Dijiste que obtuviste una salida "destrozada" al usar print_r después de hacer utf8_encode , pero la salida destrozada que obtuviste es exactamente lo que sucedería al tratar de analizar el texto UTF-8 como ISO 8859-1 (ó es /x63/xb3 en UTF-8, pero esa secuencia está ó en ISO 8859-1.
  • Su solución htmlentities hackaround funcionó. htmlentities necesita saber cuál es la codificación de la cadena de entrada para que funcione correctamente. Si no especifica uno, asume ISO 8859-1. ( html_entity_decode , confusamente, tiene como valor predeterminado UTF-8, por lo que su método tuvo el efecto de convertir de ISO 8859-1 a UTF-8).
  • Dijiste que tenías el mismo problema en Python, lo que parece excluir que PHP sea el problema.

PHP usará el /uXXXX , pero como /uXXXX , este es JSON válido.

Por lo tanto, parece que necesita configurar su conexión a Postgres para que le brinde cadenas UTF-8. El manual de PHP indica que harías esto agregando options=''--client_encoding=UTF8'' a la cadena de conexión. También existe la posibilidad de que los datos almacenados actualmente en la base de datos tengan una codificación incorrecta. (Simplemente podría usar utf8_encode , pero esto solo admitirá caracteres que son parte de ISO 8859-1).

Finalmente, como se señaló en otra respuesta, debe asegurarse de que está declarando el juego de caracteres adecuado, con un encabezado HTTP o de otra manera (por supuesto, este problema en particular podría haber sido solo un efecto del entorno donde realizó su prueba print_r )

Necesito descifrar, alterar y luego codificar sin estropear ningún personaje.

Si tengo un carácter Unicode en una cadena json, no se decodificará. No estoy seguro de por qué desde json.org dice que una cadena puede contener: any-Unicode-character- except-"-or-/-or- control-character . Pero tampoco funciona en Python.

{"Tag":"Odómetro"}

Puedo usar utf8_encode que permitirá decodificar la cadena con json_decode, sin embargo, el personaje se destroza en otra cosa. Este es el resultado de una print_r de la matriz de resultados. Dos personajes

[Tag] => Odómetro

Cuando vuelvo a codificar la matriz, el personaje escapó a ascii, que es correcto de acuerdo con la especificación json:

"Tag"=>"Od/u00f3metro"

¿Hay alguna forma en que pueda escapar de esto? json_encode no ofrece esa opción, utf8_encode tampoco parece funcionar.

Editar . Veo que hay una opción unescaped_unicode para json_encode. Sin embargo, no está funcionando como se esperaba. Oh, maldición, solo está en php 5.4. Tendré que usar algunas expresiones regulares ya que solo tengo 5.3.

$json = json_encode($array, JSON_UNESCAPED_UNICODE); Warning: json_encode() expects parameter 2 to be long, string ...


He encontrado la siguiente forma de solucionar este problema ... Espero que esto pueda ayudarlo.

json_encode($data,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);


Intenta usar:

utf8_decode() and utf8_encode


Una forma estrafalaria de hacer JSON_UNESCAPED_UNICODE en PHP 5.3. Realmente decepcionado por el soporte de PHP json. Quizás esto ayudará a alguien más.

$array = some_json(); // Encode all string children in the array to html entities. array_walk_recursive($array, function(&$item, $key) { if(is_string($item)) { $item = htmlentities($item); } }); $json = json_encode($array); // Decode the html entities and end up with unicode again. $json = html_entity_decode($rson);


intente configurar la codificación utf-8 en su página:

header(''content-type:text/html;charset=utf-8'');

esto funciona para mí:

$arr = array(''tag'' => ''Odómetro''); $encoded = json_encode($arr); $decoded = json_decode($encoded); echo $decoded->{''tag''};


JSON_UNESCAPED_UNICODE se agregó en PHP 5.4 por lo que parece que necesita actualizar su versión de PHP para aprovecharla. ¡Sin embargo, 5.4 aún no se ha lanzado! :(

Sin embargo, hay un candidato de versión 5.4 alpha en QA si quieres jugar en tu máquina de desarrollo.


$json = array(''tag'' => ''Odómetro''); // Original array $json = json_encode($json); // {"Tag":"Od/u00f3metro"} $json = json_decode($json); // Od/u00f3metro becomes Odómetro echo $json->{''tag''}; // Odómetro echo utf8_decode($json->{''tag''}); // Odómetro

Estabas cerca, solo usa utf8_decode.