2017-09-27 4 views
1

J'ai un tas de chaînes dont on m'a dit qu'elles ont été encodées en utilisant la fonction rawurlencode en PHP.Quel est le bon format de codage .NET à utiliser pour décoder une chaîne qui a été encodée à l'aide de PHP rawurlencode?

Certaines de ces chaînes contiennent des séquences codées en pourcentage pour des caractères supérieurs au codage unicode 127 - par ex. a%A0b.

Je pense le A0 dans l'exemple ci-dessus est censé représenter un espace insécable (Unicode CodePoint 160 0xA0) mais A0 sur son propre n'est pas une séquence UTF-8 valide (tout octet avec le jeu binaire élevé (> 127) fait partie d'une séquence multiple). Ainsi, .NET le décode par défaut à ?.

J'ai essayé quelques encodages différents. iso-8859-1 semble aller, mais je ne peux pas être sûr.

Cette chaîne codée URL contiendra des caractères non anglais, il est donc essentiel que la conversion se déroule correctement.

Quel est le codage correct à transmettre à System.Web.HttpUtility.ParseQueryString pour décoder une chaîne qui a été codée avec rawurlencode?

Répondre

1

Le type de chaîne natif de PHP est de type old old, sans aucune information de codage. Donc, rawurlencode ne gère pas Unicode, il sort juste hexadécimal chaque octet haut à% xx.

Si l'application veut traiter ces octets comme une représentation de caractères, c'est à l'application de décider quel encodage est utilisé. Ce serait bien si l'application vous le disait dans la documentation, et ce serait bien si ce codage était UTF-8, qui est le seul choix sensé. Mais apparemment pas.

iso-8859-1 semble correspondre, mais je ne peux pas être sûr.

Il y a beaucoup de codages carte caractère U + 00A0 insécable espace à l'octet 0xA0, y compris tous les ISO-8859s et toutes les pages de code Windows qui sont basés sur eux. Vraie ISO-8859-1 est relativement rare sur le web, vous êtes plus susceptible de rencontrer son cousin mutant Windows Western page de code 1252 (GetEncoding(1252)). La seule façon de dire serait d'entrer des caractères différents dans l'application et de voir ce qui en sort. Quels caractères "non-anglais" attendez-vous, une langue particulière?

+0

C'est la réponse dont j'avais peur. J'ai déjà (depuis posé cette question) essayé d'entrer un tas de caractères dans le système. La sortie était, dirons-nous bizarre. J'ai donc besoin de parler au développeur PHP pour le comprendre. Ma chaîne d'entrée contenait la séquence '% 22'. Le% n'a pas été encodé et donc sur la sortie il a été décodé en double citation! Pour cette raison, je pense que les problèmes vont plus loin que simple quel encodage utiliser. – DJL