Essayez de déchiffrer les caractères déformés dans le nom du fichier joint avec Python

Le nom du fichier joint est déformé

Dans quelques environnements, lorsque vous recevez une pièce jointe avec un nom japonais sur le mailer de l'application Windows 8 Store, elle ressemblera à % 1B% 24% 42 ~ .ext ou% EF% BF %% BA.ext. Il y avait un cas. Il semble que le nom du fichier d'origine soit traité comme étant codé en pourcentage. Je ne connaissais pas les mesures de base à recevoir avec le nom de fichier correct, mais pour le moment, je voulais connaître uniquement le nom du fichier, alors j'ai essayé de décoder en utilisant Python.

Décoder avec Python

En Python, vous pouvez décoder le pourcentage d'encodage en utilisant ʻurllib.parse.unquote`. Ainsi, à la suite de la conversion avec le code suivant,

unquote


import urllib.parse
a = '%1B%24%42%4A%3F%40%2E%1B%28%42%32%37%1B%24%42%47%2F%1B%28%42%2E%70%64%66'
urllib.parse.unquote(a)

Le résultat est \ x1b $ BJ? @. \ X1b (B27 \ x1b $ BG / \ x1b (B.pdf et ne peut pas être lu. Unquote spécifie ʻencoding = 'utf-8'` par défaut. Il est interprété par utf-8, mais il semble qu'il n'est pas décodé normalement, il semble donc être un code de caractère différent.

Examinez le code du caractère

En passant, si vous ne savez pas quel code de caractère a été exprimé, vous ne pouvez pas restaurer la chaîne de caractères d'origine, vous devez donc vérifier le code de caractère. En regardant les chaînes de caractères, il existe des modèles tels que «% 1B% 24% 42» et «% 1B% 28% 42», qui est le code pour changer le mode utilisé dans le code JIS. À partir de là, on peut s'attendre à ce que cette chaîne de caractères soit du code JIS.

Décodez à nouveau avec Python

Le code JIS est également appelé ISO-2022-JP, et il semble qu'il soit géré par le nom iso2022-jp en Python (est-ce le nom officiel?). Spécifiez le code de caractère avec ʻencoding = 'iso2022-jp'` et essayez le décodage.

unquote


import urllib.parse
s = '%1B%24%42%4A%3F%40%2E%1B%28%42%32%37%1B%24%42%47%2F%1B%28%42%2E%70%64%66'
urllib.parse.unquote(s, encoding='iso2022-jp')

Le résultat était «2015.pdf», et j'ai pu connaître le nom du fichier en toute sécurité.

Recommended Posts

Essayez de déchiffrer les caractères déformés dans le nom du fichier joint avec Python
Essayez de résoudre le livre des défis de programmation avec python3
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
J'ai essayé de toucher un fichier CSV avec Python
Extraire le fichier xz avec python
[python] Remplacez le nom du fichier image par un numéro de série
[Python] Ecrire dans un fichier csv avec Python
Essayez d'exploiter Facebook avec Python
Sortie vers un fichier csv avec Python
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Essayez de résoudre l'itinéraire le plus court avec les données sociales Python + NetworkX +
Essayez d'ajouter un mur à votre fichier IFC avec IfcOpenShell python
Essayez de reproduire un film couleur avec Python
Essayez de vous connecter à qiita avec Python
Vérifier l'existence du fichier avec python
Lisons le fichier RINEX avec Python ①
Python amateur tente de résumer la liste ①
Essayez de réécrire le fichier avec la commande less
La route de la compilation vers Python 3 avec Thrift
Traitement de code de caractère assimilé à "Attacher à une plaie" ~ Opération de nom de fichier déformé avec python3 ~
Mettez Cabocha 0.68 dans Windows et essayez d'analyser la dépendance avec Python
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
Python / numpy> Lire le fichier de données avec la ligne de nom d'élément> Utiliser genfromtxt ()
Essayez de résoudre le problème du fizzbuzz avec Keras
nginxparser: essayez d'analyser le fichier de configuration nginx avec Python
Comment lire un fichier CSV avec Python 2/3
Essayez de résoudre le problème de l'héritage de classe Python
Essayez de dessiner une courbe de vie avec python
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
[Python] Comment lire des fichiers Excel avec des pandas
Convertir un fichier svg en png / ico avec Python
Dites bonjour au monde avec Python avec IntelliJ
Essayez de créer un code de "décryptage" en Python
Essayez de générer automatiquement des documents Python avec Sphinx
Le moyen le plus simple d'utiliser OpenCV avec python
Introduction à Python avec Atom (en route)
Enregistrer l'objet dans un fichier avec pickle
Essayez de créer un groupe de dièdre avec Python
Extraire le zip avec Python (prend en charge les noms de fichiers japonais)
Convertir le code de caractère du fichier avec Python3
Je veux écrire dans un fichier avec Python
Essayez de détecter les poissons avec python + OpenCV2.4 (inachevé)
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (code Python)
Python / subprocess> Implémentation de lien symbolique pour obtenir uniquement le nom du fichier de destination> os.readlink ()
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
Mémorandum Python: reportez-vous au texte et modifiez le nom du fichier lors de la copie du fichier cible
Pour envoyer automatiquement des e-mails avec des pièces jointes à l'aide de l'API Gmail en Python
Essayez d'utiliser le processeur à 4 cœurs du Raspberry Pi 2 avec Parallel Python
Je veux voir le nom de fichier de DataLoader
Comment obtenir le nom de la variable lui-même en python
Modèle de script python pour lire le contenu du fichier
[Python] Essayez de lire la bonne réponse au problème FizzBuzz
[Introduction à Python] Comment itérer avec la fonction range?
Essayez de traduire avec Python tout en conservant la mise en page PDF
Visualisons la pièce avec tarte aux râpes, partie 1