2017-08-18 1 views
4

Dans quel jeu de caractères de type ASCII 8 bits pour l'anglais est 0x9d significatif? Je nettoie certains anciens fichiers de données et, à l'occasion, trouve un 0x9d dans du texte autrement ASCII. (Non, ce n'est pas UTF-8.)Dans quel jeu de caractères 8 bits est 0x9d significatif?

Ce n'est pas valide dans Windows-1252. Le codec Python "latin-1" le convertit en Unicode 0x9D, qui est "Operating System Command". Cela n'a pas de sens. En Unicode, vous obtenez une boîte avec [009d]. (En Python, vous pouvez convertir n'importe quoi en Latin-1 sans élever les erreurs, mais cela ne signifie pas que cela soit significatif.)

Exemples, avec des échappements de type Python, provenant d'une base de données désordonnée que je nettoie up qui combine le texte provenant de nombreuses sources:

Guitar Pro, JamPlay, RedBana\\\'s Audition,\x9d Doppleganger\x99s The Lounge\x9d or Heatwave Interactive\x99s Platinum Life Country,\\" 

for example \\"I\\\'ve seen the bull run in Pamplona, Spain\x9d.\\" Everything 

Netwise Depot is a \\"One Stop Web Shop\\"\x9d that provides sustainable \\"green\\"\x9d living 

are looking for a \\"Do It for Me\\"\x9d solution 

Dans le contexte, je suspecterais ™ ou ®. Mais quel est le code 8 bits?

+4

'\ 0x99' est en effet ™ dans Windows-1250 et 1252. –

+0

Peut-être lié. Expérience de la copie de texte d'un fichier PDF https://superuser.com/questions/1146479/converting-non-ascii-characters-to-ascii-characters-using-vi –

+0

Tous les exemples ci-dessus peuvent être trouvés dans la boîte de détails de la société sur Crunchbase. Peut-être spécifique à Crunchbase. –

Répondre

1

En Windows-1256, utilisé pour les locales en arabe, \x99 est un signe de marque déposée et \x9d est un non-jointeur de largeur zéro. Cela semble plausible dans les positions énumérées, bien que redondant probablement. Il n'y a certainement pas de pénurie de character sets à essayer.

Un outil pour tenter de deviner automatiquement est chardet.

0

Peut être les données proviennent d'un fichier DOS (CP850). Dans mon expérience dans ce cas, le caractère 0x9D a été utilisé comme un signe de "diamètre" lorsqu'il s'agit de tuyaux ou de tubes.

2

est ici une hypothèse tout à fait sauvage:

Certains avant système (vraiment cassé) travaillant sur ces données tenté d'écrire chaque caractère UTF-8, mais en fait seulement écrit le dernier octet de chaque séquence (peut-être eu un tampon un octet bizarre quelque part). Sinon, il était en UTF-8 dans le passé, mais quelqu'un qui l'a vu dans un encodage différent a fait une recherche-et-remplacer pour supprimer les octets 0xE2 0x80 parce qu'ils "n'appartiennent pas" et n'ont pas réalisé que le reste " caractère spécial "n'était pas celui qu'ils voulaient non plus.

ASCII, serait bien sûr, être transmis à travers son encodage UTF-8 serait d'un octet long. La «MARQUE DE COTATION UNIQUE» (U + 2019) est codée en UTF-8 avec les octets 0xE2 0x80 0x99. Les endroits où vous avez \x99s est ce qui m'a fait aller dans cette voie, puisque l'apostrophe devant un s serait souvent traduite par une citation droite dans un logiciel de traitement de texte populaire. Si seulement le dernier octet du personnage était enregistré, vous auriez juste le 0x99 là. La «MARQUE DE COTATION DOUBLE DROITE» (U + 201D) est codée en UTF-8 avec les octets 0xE2 0x80 0x9D. Le 0x9D que vous avez dans votre texte est souvent à la fin d'une chaîne entre guillemets. Et, il est souvent juste à côté d'un guillemet simple et régulier. Je me demande si quelqu'un a essayé de faire une sorte de passe de nettoyage préalable sur les données, et a réussi à remettre dans la citation de fermeture, mais a laissé le "bizarre" 0x9D là-dedans. Comme je l'ai dit, c'est une hypothèse folle, mais s'il s'agit d'un conglomérat de données provenant de divers systèmes anciens, il est difficile de savoir exactement ce qui peut lui être arrivé. Le dernier octet de UTF-8 était juste l'encodage anglais "normal" le plus proche que je pourrais trouver qui aurait quelque chose de raisonnable dans le texte anglais et inclus les octets que vous cherchiez.

+0

Il y a un autre domaine où quelque chose comme ça est arrivé. Il y a un champ "nom normalisé", qui est forcé de mettre en minuscule. Mais il a été forcé de minuscules comme si ASCII, même si les données étaient UTF-8. Qui a abouti à des choses comme KACMAZLAR MEKANİK -> kacmazlar mekanä ° k, Anita Calçados -> anita calã§ados, Felfria Resor pour Koh Lanta -> felfria resor fã¶r att koh lanta. Mais cela ne semble pas être la source du problème 09d. Quoi qu'il en soit, j'ai décidé de jeter tous les caractères 0x9d pour tout ce qui n'est pas analysé comme UTF-8 ou Windows-1252. –

0

Je vais fermer cela, car, après avoir demandé à plusieurs endroits, il est clair qu'il n'y a pas de codage de données ASCII 8 bits étendu qui utilise 0x9D d'une manière qui a du sens ici.

Cela peut être le résultat d'une longue confusion sur les données. Il existe d'autres questions Stack Overflow sur les conversions charset Python qui échouent sur 0x9D spécifiquement, donc ce n'est pas unique à ces données. Quelque part, il y a quelque chose qui colle dans un 0x9D de temps en temps, généralement après des guillemets. Peut-être un vieux traitement de texte. Merci tout le monde.