[PYTHON] Débarrassez-vous des caractères japonais brouillés lorsque vous passez par FBX

C'est une continuation de la dernière fois (▼).

--Je veux obtenir un nombre hexadécimal à 2 chiffres à partir d'un nombre décimal http://qiita.com/it_ks/items/55d43baa996860edaabb

Lorsqu'il y a un objet avec un nom japonais dans la scène Si vous le passez par FBX, il sera converti en le nom d'objet suivant.

FBXASC229FBXASC137FBXASC141FBXASC233FBXASC171FBXASC1702

oh! Fxxk!!

Les matériaux, les textures, les cibles de fusion, etc. seront les mêmes, donc ** Beaucoup ** Ce genre de chose est cultivé.

je veux faire quelque chose

J'ai essayé comme suit.

from binascii import a2b_hex as a2b

def fbxasc_to_chr( target_str ):
    return_list = []

    stock = ''
    for var in target_str.split( 'FBXASC' ):
        #Ignorer si vide
        if not var:
            continue
        #Non applicable si le premier caractère est un retour alphabétique_Ajoutez à la liste et passez au suivant.
        if var[0].isalpha():
            return_list.append(var)
            continue

        #Si le nombre de caractères est supérieur à 3, conversion int jusqu'au 3ème caractère
        ex_digit = ''
        if len(var)>3:
            ex_digit = var[3:]
            code_int = int(var[:3])
        else:
            code_int = int(var)

        stock +=hex( code_int )
        try:
            return_list.append( a2b(stock.replace('0x','')).decode('utf8') )
        except UnicodeDecodeError:
            continue

        #Réinitialiser lorsque le décodage et l'ajout sont terminés
        stock = ''

        if ex_digit:
            return_list.append(ex_digit)

    return ''.join(return_list)

Commentaire doux

Si vous regardez la chaîne FBX d'accrochage, vous pouvez voir que ** "FBX ASC" ** est inclus régulièrement.

Plus à dire

FBXASC + 0-255

C'est une combinaison de. Cela peut être décodé en tant que caractère lorsque plusieurs sont alignés en une seule unité (1 octet). Certains veulent dire que l'un peut être vrai et que trois peuvent l'être. C'est assez compliqué, je vais donc laisser les détails au commentaire UTF-8 @wikipedia. https://ja.wikipedia.org/wiki/UTF-8#.E6.96.87.E5.AD.97.E7.A8.AE (▲) D'après ce tableau, le nombre de symboles alphanumériques est de 1 et le nombre de «caractères d'Asie de l'Est / pleine largeur» est de 3. Certains des kanji de niveau 3 et 4 sont 4.

hex

Il ne peut pas être utilisé car il est 0-255, alors convertissez-le en hexadécimal. C'est l'article précédent que j'ai mentionné au début. J'ai décidé d'utiliser la fonction hexadécimale.

Il y a toujours un 0x après la conversion, mais il est supprimé ensemble avant la conversion d'ASCII en binaire.

〜〜.replace('0x','')

ASCII-> conversion binaire

Jusqu'à présent, il s'agit toujours d'une "chaîne de caractères composée de 0-9a-f". Convertissez-le en binaire. Utilisez la ** fonction a2b_hex ** du ** module binascii **.

--19.8. Binascii - Conversion entre données binaires et données ASCII https://docs.python.jp/3/library/binascii.html#binascii.a2b_hex Ici, il s'agit simplement de "a2b" lors de l'importation.

Après la conversion ASCII-> binaire, vous pouvez utiliser la ** méthode de décodage **, mais si l'adresse n'existe pas, une erreur de décodage se produira. Cette erreur est détectée et si une erreur de décodage se produit, elle est reportée à la suivante, concaténée et convertie à nouveau.

Traiter avec des amis drôles qui ne sont pas FBX ASC

Ce serait rapide si toutes les chaînes de caractères étaient "FBXASC + 0-255" ...

Par exemple, "." Est réécrit en "FBXASC046" et apparaît. Les caractères alphanumériques ordinaires sont mélangés dans la chaîne de caractères tels quels. Donc, si vous divisez simplement avec FBXASC, vous obtiendrez "4 chiffres nombre * (il ne sera pas 0-255 largeur) *" ou "3 chiffres + caractère alphabétique * (passer en hexadécimal)". (La conversion Int ne peut pas être effectuée avant) * "sera inclus. J'ai décidé de mettre les chiffres supplémentaires dans une variable appelée ex_digit et de les concaténer plus tard.

De plus, si le nom de l'objet commence / se termine par des caractères alphanumériques, je ne sais pas combien d'éléments qui ne sont pas divisés par FBXASC seront ajoutés au début / à la fin, alors triez par si pour le faire ressembler à cela ('A').

Du coup, je n'ai pas l'impression qu'il y en aura plus (rires)

Je viens de remarquer qu'il y a une inquiétude mystérieuse que si le nombre 0-255 est inclus, il sera brouillé-je suis fatigué donc ça va: wink :: wink :: clin d'œil:

Résumé

Tous les véhicules, y compris les japonais dans la scène, sont envoyés en Sibérie pour 25 roubles!

référence

Recommended Posts

Débarrassez-vous des caractères japonais brouillés lorsque vous passez par FBX
Débarrassez-vous de KeyError de python
Débarrassez-vous de slow scp -pr
Comment se débarrasser des longues inclusions
Débarrassez-vous des images DICOM en Python