[PYTHON] Entfernen Sie die verstümmelte japanische Zeichenkette, wenn Sie FBX durchlaufen

Es ist eine Fortsetzung des letzten Males (▼).

Wenn sich in der Szene ein Objekt mit einem japanischen Namen befindet Wenn Sie es an FBX übergeben, wird es in den folgenden Objektnamen konvertiert.

FBXASC229FBXASC137FBXASC141FBXASC233FBXASC171FBXASC1702

oh! Fxxk!!

Materialien, Texturen, Mischziele usw. sind also gleich ** Ziemlich viel ** So etwas wird kultiviert.

ich will etwas tun

Ich habe es wie folgt versucht.

from binascii import a2b_hex as a2b

def fbxasc_to_chr( target_str ):
    return_list = []

    stock = ''
    for var in target_str.split( 'FBXASC' ):
        #Ignorieren, wenn leer
        if not var:
            continue
        #Gilt nicht, wenn das erste Zeichen eine Alphabet-Rückgabe ist_Zur Liste hinzufügen und mit dem nächsten fortfahren.
        if var[0].isalpha():
            return_list.append(var)
            continue

        #Wenn die Anzahl der Zeichen mehr als 3 beträgt, wird die int-Konvertierung bis zum 3. Zeichen durchgeführt
        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

        #Zurücksetzen, wenn Dekodieren und Anhängen abgeschlossen sind
        stock = ''

        if ex_digit:
            return_list.append(ex_digit)

    return ''.join(return_list)

Weicher Kommentar

Wenn Sie sich die Hooking-FBX-Zeichenfolge ansehen, können Sie sehen, dass ** "FBX ASC" ** regelmäßig enthalten ist.

Mehr zu sagen

FBXASC + 0-255

Es ist eine Kombination von. Dies kann als Zeichen dekodiert werden, wenn mehrere als eine Einheit (1 Byte) angeordnet sind. Einige bedeuten, dass eins wahr sein kann und drei wahr sein können. Es ist ziemlich kompliziert, deshalb überlasse ich die Details dem UTF-8-Kommentar @wikipedia. https://ja.wikipedia.org/wiki/UTF-8#.E6.96.87.E5.AD.97.E7.A8.AE (▲) Gemäß dieser Tabelle beträgt die Anzahl der alphanumerischen Symbole 1 und die Anzahl der "ostasiatischen Zeichen / volle Breite" 3. Einige der Kanji der 3. und 4. Stufe sind 4.

hex

Es kann nicht verwendet werden, da es 0-255 ist. Konvertieren Sie es daher in hexadezimal. Dies ist der vorherige Artikel, den ich am Anfang erwähnt habe. Ich habe mich für die Hex-Funktion entschieden.

Nach der Konvertierung gibt es immer eine "0x", diese wird jedoch auf einmal entfernt, bevor von ASCII in eine Binärdatei konvertiert wird.

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

ASCII-> binäre Konvertierung

Bis zu diesem Punkt ist es immer noch eine "Zeichenkette aus 0-9a-f". Konvertieren Sie dies in binär. Verwenden Sie die Funktion ** a2b_hex ** des ** binascii-Moduls **.

--19.8. Binascii - Konvertierung zwischen Binärdaten und ASCII-Daten https://docs.python.jp/3/library/binascii.html#binascii.a2b_hex Hier ist es beim Import einfach "a2b".

Nach der ASCII-> Binärkonvertierung können Sie die ** Dekodierungsmethode ** verwenden. Wenn die Adresse jedoch nicht vorhanden ist, tritt ein Dekodierungsfehler auf. Dieser Fehler wird erkannt, und wenn ein Decodierungsfehler auftritt, wird er auf den nächsten übertragen, verkettet und erneut konvertiert.

Umgang mit lustigen Freunden, die nicht FBX ASC sind

Es wäre schnell, wenn alle Zeichenketten "FBXASC + 0-255" wären ...

Beispiel: "." Wird in "FBXASC046" umgeschrieben und angezeigt. Gewöhnliche alphanumerische Zeichen werden so wie sie sind in der Zeichenfolge gemischt. Wenn Sie also einfach mit FBXASC teilen, erhalten Sie "4-stellige Zahl * (nicht 0-255 breit) *" oder "3-stelliges + alphabetisches Zeichen * (an Hex übergeben)". (Int-Konvertierung kann vorher nicht durchgeführt werden) * "wird eingeschlossen. Ich beschloss, die zusätzlichen Ziffern in eine Variable namens ex_digit einzufügen und sie später zu verketten.

Wenn der Objektname mit alphanumerischen Zeichen beginnt / endet, weiß ich nicht, wie viele Elemente, die nicht von FBXASC geteilt werden, am Anfang / Ende hinzugefügt werden. Sortieren Sie sie daher mit if ('A`).

Infolgedessen habe ich nicht das Gefühl, dass es mehr geben wird (lacht)

Ich habe gerade bemerkt, dass es ein mysteriöses Problem gibt, dass wenn die Nummer 0-255 enthalten ist, sie verstümmelt wird - ich bin müde, also ist es okay: wink :: wink :: zwinkern:

Zusammenfassung

Alle Fahrzeuge, einschließlich Japaner in der Szene, werden für 25 Rubel nach Sibirien geschickt!

Referenz

Recommended Posts

Entfernen Sie die verstümmelte japanische Zeichenkette, wenn Sie FBX durchlaufen
Befreien Sie sich von Pythons KeyError
Langsames scp -pr loswerden
Wie man lange Einschlüsse loswird
Entfernen Sie DICOM-Bilder in Python