utf-8-Sequenz in der Konsole

utf-8-Sequenz in der Konsole

Wenn ich den Befehl „tree“ in der Konsole ausführe, erhalte ich Folgendes:

.
├── Annexe\ 1\ -\ Sch\303\251ma\ global\ de\ la\ base\ de\ donn\303\251es.raw
...

Das Ergebnis besteht aus UTF-8-Sequenzen. Ich muss die Zeichenfolge für einen Bericht in ein für Menschen lesbares Format bringen. Wie kann ich dieses fiese Ding konvertieren?

Antwort1

Sie können mit dem Schalter jeden beliebigen Zeichensatz angeben, der verwendet werden soll --charset.

   --charset charset
          Set the character set to use when outputting HTML and for line 
          drawing.

Es gibt auch diese beiden Schalter, die hilfreich sein können:

   -q     Print non-printable characters in filenames as question marks 
          instead of the default.

   -N     Print non-printable characters as is instead of as escaped octal 
          numbers.

Sie können die Ausgabe auch mit diesen Schaltern erweitern:

   -A     Turn on ANSI line graphics hack when printing the indentation 
          lines.

   -S     Turn on ASCII line graphics (useful when using Linux console mode 
          fonts). This option is now equivalent to `--charset=IBM437' and 
          may eventually be depreciated.

Antwort2

Ich kann diese Ausgabe mit folgendem Ergebnis erhalten:

LC_ALL=C tree -A

Sie würden sehen \303\251, treedass 0303 und 0251 keine gültigen Zeichen (oder Zeichenfolge in Ihrer Region) sind.

Dies gilt jedoch für UTF-8-Gebietsschemas, wo \303\251ist é, und für ISO-8859-1 oder ISO-8859-15 (die beiden gängigen Zeichensätze mit einem Byte pro Zeichen, die in französischsprachigen Ländern üblich sind), wo \303ist Ãund \251ist ©.

Das deutet hier darauf hin, dass Sie sich in einem Gebietsschema befinden, in dem der Zeichensatz nur für die ersten 128-Byte-Werte definiert ist, genau wie ASCII im Gebietsschema C.

Sie könnten feststellen tree, dass Ihr Zeichensatz UTF-8 oder ISO-8859-15 ist, und dann würden diese 0303 Bytes nicht in übersetzt \303.

locale -azeigt Ihnen an, ob auf Ihrem System ein Gebietsschema mit einem UTF-8-Zeichensatz vorhanden ist. Dann können Sie eines wie folgt auswählen fr_FR.UTF-8:

LC_ALL=fr_FR.UTF-8 tree

Ob es dann richtig angezeigt wird oder nicht, hängt jedoch davon ab, was Ihr Terminalemulator versteht. Wenn er nicht für die Anzeige von UTF-8-Zeichen konfiguriert ist, funktioniert es nicht.

Wenn Ihr Terminalemulator ISO-8859-1 anzeigen kann, können Sie treeUTF-8 anzeigen und dies wie folgt konvertieren iconv:

LC_ALL=fr_FR.UTF-8 tree | iconv -f UTF-8

verwandte Informationen