J'essaie d'envoyer une valeur hexadécimale spécifique sur un port COM série à l'aide de PuTTY. Plus précisément, je veux envoyer les codes hexadécimaux 9C, B6, FC et 8B. J'ai regardé le Alt codes pour ceux-ci et ils sont 156, 182, 252 et 139 respectivement.
Cependant, chaque fois que je saisis le Alt Pour les codes, une valeur hexadécimale antérieure de C2 est envoyée avant 9C, B6 et 8B; les valeurs envoyées sont donc C2 9C, C2 B6 et C2 8B. La valeur de FC est modifiée en C3 FC.
Pourquoi ces valeurs sont-elles placées avant la valeur hexadécimale et pourquoi FC est-il complètement modifié? Pour moi, il semble qu’il y ait un problème de conversion interne du Alt code en hexadécimal. Existe-t-il un moyen de saisir directement des valeurs hexadécimales sans utiliser Alt codes dans PuTTY?
Réponses:
Ce que vous voyez est simplement une conversion de jeu de caractères de texte ordinaire.
En ce qui concerne PuTTY, vous tapez (et lisez) texte , pas de données binaires brutes, il doit donc convertir le texte en octets dans tout jeu de caractères configuré avant de l’envoyer par le fil.
En d'autres termes, lorsque vous tapez Alt + 1 8 2 , PuTTY reçoit le message correspondant personnage à partir du jeu de caractères "OEM" hérité pour lequel le système est configuré. (Dactylographie Alt + 0 1 8 2 choisirait dans l’ancien jeu de caractères "ANSI" (Windows-125x).) Dans ce cas, le caractère est
¶
, un pilcrow.Maintenant, PuTTY doit convertir ce caractère en octets. Les versions antérieures de PuTTY choisissaient par défaut le même jeu de caractères Windows-125x hérité que celui utilisé par le système d'exploitation lui-même, par exemple. Windows-1257, la conversion était donc presque directe - entrée 1 8 2 , recevez l'octet 182 décimal (0xB6 hex).
Cependant, comme PuTTY se connecte généralement à des serveurs Linux ou BSD, la très grande majorité d’entre eux ont migré vers UTF-8 Par défaut, la dernière version de PuTTY a également commencé à utiliser UTF-8 par défaut. UTF-8 est un encodage du méga-jeu de caractères Unicode, qui a
¶
en position U + 00B6, et il est surtout juste une coïncidence que UTF-8 code cette valeur en octetsC2 B6
:U+00B6
→0000|0000 10|110110
→[110]00010 [10]110110
→C2 B6
U+00FC
→0000|0000 11|111100
→[110]00011 [10]111100
→C3 BC
U+20AC
→0010|0000 10|101100
→[1110]0010 [10]000010 [10]101100
→E2 82 AC
Wikipedia a des couleurs
Comme autre exemple, la lettre
ė
utilisé pour être octetE6
dans le jeu de caractères Windows-1257, mais dans Unicode, il s'agit de U + 0117, correspondant aux octetsC4 97
en UTF-8. Ces séquences sont de longueur variable, jusqu'à 4 octets pour les positions plus grandes.Si vous devez absolument utiliser PuTTY pour envoyer des données binaires, ouvrez l'écran de paramétrage "Fenêtre → Traduction" et choisissez CP437, ISO-8859-1 ou Windows-1252 comme "Jeu de caractères à distance". (Enregistrez ceci dans une session séparée; ne ne pas enregistrez ceci en tant que valeur globale par défaut, car cela rompra les connexions SSH habituelles.)
la source