web-dev-qa-db-fra.com

Quel encodage utilise le préfixe\x (barre oblique inverse x)?

J'essaie de décoder le texte qui préfixe certains "caractères spéciaux" avec\x . J'ai élaboré manuellement les correspondances suivantes:

\x28   (
\x29   )
\x3a   :

e.g. 12\x3a39\x3a03 AM

Est-ce que quelqu'un reconnaît ce qu'est cet encodage?

28
Alex Angas

C'est ASCII . Toutes les occurrences des quatre caractères \xST sont converties en un caractère dont le code ASCII est ST (in hexadecimal ), où S et T sont quelconques de 0123456789abcdefABCDEF.

30
pts

La notation '\xAB' est utilisée en C, C++, Perl et dans d’autres langages utilisant Cue, pour exprimer des codes de caractères hexadécimaux au milieu d’une chaîne.

La notation '\007' signifie utiliser octal pour le code de caractère, lorsqu'il y a des chiffres après la barre oblique inverse.

Dans C99 et les versions ultérieures, vous pouvez également utiliser \uabcd et \U00abcdef pour coder les caractères Unicode en hexadécimal (avec 4 et 8 chiffres hexadécimaux requis; les deux premiers chiffres hexadécimaux dans \U doivent être 0 pour être valides, et souvent le troisième chiffre sera également 0 - 1 est la seule autre valeur valide).

Notez qu'en C, les échappements octaux sont limités à 3 chiffres au maximum, mais les échappements hexadécimaux ne sont pas limités à 2 ou 3 chiffres; l'échappement hexadécimal se termine au premier caractère qui n'est pas un chiffre hexadécimal. Dans la question, la séquence est "12\x3a39\x3a03". C'est une chaîne contenant 4 caractères: 1, 2, \x3a39 et \x3a03. La valeur réelle utilisée pour les caractères hexadécimaux à 4 chiffres est définie par l'implémentation. Pour obtenir le résultat souhaité (en utilisant \x3A pour représenter deux points :), le code devrait utiliser la concaténation de chaînes:

"12\x3a" "39\x3a" "03"

Celui-ci contient maintenant 8 caractères: 1, 2, :, 3, 9, :, 0, 3.

17
Jonathan Leffler

Je suppose que vous avez affaire à une chaîne unicode codée différemment du flux de sortie auquel elle a été envoyée. c'est à dire. une sortie de chaîne utf-16 sur un périphérique latin-1. Dans cette situation, certains caractères seront sortis en tant que valeurs d'échappement pour éviter d'envoyer des caractères de contrôle ou des caractères incorrects au périphérique de sortie. Cela se produit au moins en python.

0
lostlogic