Unix-Tool zur Ausgabe der ersten n Zeichen in einer UTF-8-codierten Datei

1910
Wu Yongzheng

Ich möchte die ersten 1000 Zeichen in einer UTF-8-kodierten Datei drucken . Ich weiß, dass das Head- Tool die ersten n Bytes einer Datei drucken kann, aber es kann ein Zeichen in der Mitte schneiden, sodass ich am Ende eine verstümmelte Ausgabe bekomme.

Ich kann dazu ein awk-Programm schreiben, aber kann ich wissen, ob es einen einfacheren Weg gibt?

PS. Ich fand es unangemessen, dass Kopf und Schwanz die Zeichenkodierung nicht unterstützen (die Umgebungsvariable LANG), während andere Tools wie cut, wc, sed und awk alle die Zeichenkodierung unterstützen.

1
Eine andere Sache, über die Sie nachdenken sollten - selbst wenn Sie ganze Codepunkte ausgeben, können Sie dennoch die Basiszeichen von den nachfolgenden kombinierenden Zeichen trennen. Wenn dies ein Problem für Ihre Anwendung ist, müssen Sie etwas komplexeres tun als die bisherige Antwort. Richard Kettlewell vor 11 Jahren 0

1 Antwort auf die Frage

0
Barnaby Shearer

Nicht sicher, dass es einfacher ist, aber dies ist mein Weg:

cat file | iconv -t UTF-32 | head -c $[1000 *4+4] | iconv -f UTF-32 

Dies konvertiert in eine Unicode-Form mit fester Breite, so dass der 1000 immer ganze Zeichen darstellt.

iconv (das in glibc enthaltene) hat den Fehler, dass die gesamte Eingabe vor der Ausgabe gepuffert wird. Dies hat enorme Auswirkungen auf die Leistung. Trotzdem funktioniert Ihr Ansatz. Wu Yongzheng vor 11 Jahren 0