2016-09-07 1 views
2

je récupérer de Odoo 9 sur Ubuntu 14.04 ENG une liste de partenaires via XML-RPC en utilisant PHP et ripcordproblème de codage étrange dans l'appel XML-RPC

Certains noms contiennent un ou plusieurs diacritiques:

  • PIER
  • PIER Frère

Tous ces noms ont été saisis à partir d'un seul ordinateur exécutant Windows 8.1 en utilisant une version de Chrome.

Le fait étrange est que je reçois une liste où certains diacritiques sont corrects, d'autres ont des problèmes d'encodage, comme:

  • Pir
  • Frre PIER

Le même diacritique dans la même chaîne est correctement codé ou non.

Dans les appels suivants, le résultat est toujours le même.

Si je modifier la chaîne, il pourrait changer les résultats, donnant

  • Pir
  • Frère
  • PIER
  • Frère
  • Frre Pir ...

Je dois sortir un JSON, et donc j'ai besoin de l'encoder en UTF-8: mais c'est actuellement impossible car je n'ai pas la moindre idée de l'encodage du texte original (et il ne semble pas y avoir de codage tout!)

Une idée?

Répondre

2

Je trouve que la matrice d'entrée était en charset "Latin1"

I résolu la normalisation de la matrice générée à partir de la sortie XML-RPC, en appliquant de manière récursive une fonction de conversion de multbyte:

// given an XML-RPC output named $arr_output... 

function descramble_diacritics(&$entry, $key) { 
    $entry = mb_convert_encoding($entry, 'UTF-8', 'Latin1'); 
} 
array_walk_recursive($arr_output, 'descramble_diacritics'); 

header('Access-Control-Allow-Origin: *'); 
header('Content-Type: application/json'); 
echo json_encode($arr_output);