Wie bekomme ich UTF8 von einer Hex-Variablen?

7

Ich debugge eine App für einen Client und habe die Informationen aus der Datenbank gefunden, die eine Lösung sein könnten. Ich bitte den Kunden, es zu extrahieren, aber leider hat mir der Kunde die Rohdaten hexadezimal gesendet ...

Ich bitte den Client, mir den Klartext aus den DB-Tools erneut zu senden, aber bis zur Antwort suche ich nach einer Bash-Lösung.

Ich weiß, dass die codierten Daten eine UTF-8-codierte Zeichenfolge sind: Gibt es eine Möglichkeit, sie mit Unix-Tools zu decodieren?

Fractaliste
quelle
"Die Daten unten" fehlen.
Kusalananda
1
@Kusalananda Sicher, ich habe vergessen, es zu entfernen, weil ich das Hexa hier nicht posten kann. Es könnten kritische Daten sein, solange ich es nicht entschlüsselt habe
Fractaliste
Was ist "eine Hexa-Variable"? Können Sie die Darstellung der Daten genauer beschreiben? Meinen Sie eine ASCII-Zeichenfolge, die aus verketteten Hex-Paaren besteht? Oder etwas anderes?
Leichtigkeitsrennen im Orbit
@BoundaryImposition Ja, ich habe Hex-Paare wie 426f756e64617279496d706f736974696f6e.
Fractaliste
@Fractaliste: Diese Angaben gehören bitte in die Frage. Wenn Sie Fragen zu Daten stellen, sollten Sie das Datenformat immer genau definieren.
Leichtigkeitsrennen im Orbit

Antworten:

12

Mit xxd(normalerweise versandt mit vim)

$ echo 5374c3a97068616e650a | xxd -p -r
Stéphane

Wenn der Zeichensatz Ihres Gebietsschemas (siehe Ausgabe von locale charmap) nicht UTF-8 ist (aber alle Zeichen in der codierten Zeichenfolge darstellen kann), fügen Sie a hinzu | iconv -f UTF-8.

Wenn nicht alle Zeichen dargestellt werden können, können Sie versuchen | iconv -f UTF-8 -t //TRANSLIT, eine Annäherung zu erhalten.

Stéphane Chazelas
quelle
1
Hinweis für Gelegenheitsleser: Ist//TRANSLIT kein beschreibender Kommentar -t, sondern ein Argument dafür ... siehe npmjs.com/package/iconv#dealing-with-untranslatable-characters oder besser, siehe das Upstream-Handbuch für die Unix-Version: man7 .org / linux / man-pages / man1 / iconv.1.html
Olivier Dulac
3

Zählt Perl?

$ echo "68656c6c6f0a" | \
  perl -ne 'tr/a-fA-F0-9//cd; print pack("H*", $_)'
hello

Wenn nicht, könnte dies möglicherweise Folgendes bewirken:

$ echo "68656c6c6f0a" | sed -Ee 's/[0-9a-fA-F]{2}/\\\\x&/g' | xargs printf 
hello

Wir brauchen einen wörtlichen Backslash für printf, aber es ist etwas Besonderes für beide xargsund sedmuss daher zweimal verdoppelt werden. ( \\\\x-> \\x-> \x)

ilkkachu
quelle
Ich kann PERL nicht verwenden, aber die sed-Lösung funktioniert einwandfrei. Warum muss man dem vierfachen xCharakter entkommen ?
Fractaliste
@Fractaliste, für xargs und sed, bearbeitet
ilkkachu