Konvertieren Sie hexadezimales Shift-JIS in die Zeichen

1227
Philippe Remy

Ich suche nach dem Weg, den hexadezimalen Wert von Shift-JIS in die Zeichen in der Unix / Linux-Befehlszeile zu konvertieren.

Eine Shift-JIS-Codetabelle finden Sie hier .

Zum:

82 ae (0x82ae) 

Ich würde erwarten:

Ich weiß, dass es irgendwie möglich ist ascii2uniund nkfich bin irgendwie festgefahren.

HINWEIS: Ich könnte dies tun, aber es ist nicht das erwartete Ergebnis:

echo "0x82BE" | ascii2uni -a X | nkf -S Result is: 1 token converted 闃セ 

Ich habe diesen Thread gefunden, der die Verwendung vorschlägt, iconvaber mit dieser Methode dieselben Ergebnisse erzielt hat.

Kannst du Leute helfen?

2
Ich habe http://superuser.com/questions/313032/how-to-convert-a-text-file-from-shift-jis-to-utf-8-und-back-from-the-terminal gefunden, aber ich habe es gefunden das gleiche Ergebnis mit ihrer Methode. Philippe Remy vor 8 Jahren 0
Dieses `iconv'-Rezept hätte Shift-JIS in UTF-8 konvertieren sollen. Wurde es als 闃 セ angezeigt? Welches Terminalprogramm verwenden Sie? Tom Zych vor 8 Jahren 0
Missachtung, es ist nicht die Terminal-Kodierung. Siehe Antwort unten. Tom Zych vor 8 Jahren 0

2 Antworten auf die Frage

2
Tom Zych

Ihre Datei enthält nicht die Binärdatei, von der Sie glauben, dass sie sie enthält. ascii2uni kodiert nicht so, wie Sie es erwarten; Ich bin mir nicht sicher warum.

echo "0x82BE" | ascii2uni -a X > test1 od -tx1 test1 0000000 e8 8a be 0a 

(Beachten Sie, dass echo -ndies dasselbe tut. Der Zeilenumbruch 0akommt von ascii2uni, nicht echo.)

Umsetzen mit iconv:

iconv -f SHIFT-JIS -t UTF-8 test1 > test2 od -tx1 test2 0000000 e9 97 83 ef bd be 0a cat test2 闃セ 

Was hast du bekommen? (Beachten Sie auch, dass Sie in Ihrem Beispiel für ascii2uni Folgendes hatten 82BE: Sh in Shift-JIS, anstelle Ihres Originals 0x82ae, ぐ. Ich bleibe dabei 82BE.)

Das Problem ist, dass die Binärdatei nicht richtig war. Mach es so:

echo -en '\x82\xbe' > test3 od -tx1 test3 0000000 82 be iconv -f SHIFT-JIS -t UTF-8 test3 > test4 od -tx1 test4 0000000 e3 81 a0 cat test4 だ 
Danke für die Erklärung. Genau das, was ich brauchte. Sehr geschätzt! Philippe Remy vor 8 Jahren 0
1
JakeGould

Basierend auf dieser Antwort auf der Unix- und Linux-Stack-Exchange-Site, recodearbeitet sie unter Ubuntu 12.04.5 (LTS) sauber für mich:

echo -n 0x82ae | recode SHIFT-JIS/x4..UTF-8 

Natürlich konvertiert dies die Ausgabe des hexadezimalen Codes von Shift-JIS in UTF-8, aber zum Teufel ... UTF-8 verwenden heutzutage alle Kinder. Aber du kannst das ..UTF-8Zeug einfach abschneiden und die Ausgabe sollte reines Shift-JIS sein:

echo -n 0x82ae | recode SHIFT-JIS/x4 

Um zu bestätigen, dass es korrekt in UTF-8 konvertiert wurde, können Sie es xxdwie folgt weiterleiten :

echo -n 0x82ae | recode SHIFT-JIS/x4..UTF-8 | xxd -p -u 

Und er überprüft, wie Wesen aus, E38190das entspricht exakt die gleichen Zeichen in UTF-8, wie hier gezeigt . Eine vollständige Tabelle der Shift-JIS- zu UTF-8-Konvertierungszuordnungen finden Sie hier .

Oder Sie können einfach xxdvon der Befehlszeile aus so laufen, um den genauen Hexadezimalcode für ein beliebiges Zeichen (oder eine Folge von Zeichen) zu erhalten:

echo -n "ぐ" | xxd -p -u 
Das `iconv` sollte ebenfalls in UFT-8 konvertiert sein. Ich vermute, sein Terminal verwendet eine andere Codierung. Tom Zych vor 8 Jahren 1
Nein, ich habe mich geirrt. Schreibe die Antwort jetzt auf. Tom Zych vor 8 Jahren 1
Jake, danke für die klare Antwort. Es funktioniert jetzt! Philippe Remy vor 8 Jahren 1
@ TomZych Kein Problem. Probleme bei der Zeichenkodierung können ein bisschen magisch sein, wenn Sie damit umgehen. Magie, Kopfschmerzen und Glück. JakeGould vor 8 Jahren 0