perl: convertir une chaîne de caractères utf-8 pour le décodage json
Je suis de l'analyse d'un site web et de recueillir des informations à partir de son JSON. Les résultats sont enregistrés dans une table de hachage. Mais certaines pages me donner "mal formé de caractères UTF-8 dans la chaîne JSON" erreur. Je remarque que la dernière lettre dans le "café" va produire d'erreur. Je pense que c'est à cause de la combinaison de types de caractères. Alors maintenant, je suis à la recherche d'un moyen de convertir tous les types de caractères utf-8 (espérons qu'il y est un moyen parfait comme ça). J'ai essayé utf8::tous, il ne fonctionne tout simplement pas (j'ai peut-être pas le faire à droite). Je suis un noob. S'il vous plaît aider, merci.
UPDATA
Bien, après j'ai lu l'article "Connaître la différence entre les chaînes de caractères et des chaînes UTF-8" Posté par brian d foy. - Je résoudre le problème avec les codes:
use utf8;
use Encode qw(encode_utf8);
use JSON;
my $json_data = qq( { "cat" : "Büster" } );
$json_data = encode_utf8( $json_data );
my $perl_hash = decode_json( $json_data );
Espère que cela aide quelqu'un d'autre.
mon problème est résolu. Merci pour le demander.
OriginalL'auteur Ivan Wang | 2012-05-22
Vous devez vous connecter pour publier un commentaire.
decode_json
attend le JSON avoir été encodée en UTF-8.Tandis que votre fichier est encodé en UTF-8, vous avez Perl décoder en utilisant
use utf8;
(comme vous). Cela signifie que votre chaîne contient des caractères Unicode, pas de l'UTF-8 octets qui représentent ces personnages.Comme vous l'avez indiqué, vous pouvez encoder la chaîne avant de passer à
decode_json
.Mais vous pouvez tout simplement vous dire JSON que la chaîne est déjà décodé.
La question n'a pas de sens. Il n'y a pas de "est", il y a seulement "doit être". Si l'entrée de
$json->decode
doit être codé en UTF-8 et ne doit pas être codée dépend de si vous utilisezJSON->new->utf8(1)->decode
(akadecode_json
) (entrée doit être en UTF-8) ouJSON->new->utf8(0)->decode
(entrée doit être Unicode caractères).cela fonctionne, merci!!
OriginalL'auteur ikegami