So finden Sie heraus, ob ein Terminal UTF-8 unterstützt

21

Ich richte das CPAN-Modul für Perl auf CentOs 5 ein und eine der Fragen lautet: Unterstützt Ihr Terminal UTF-8? (umschrieben). Wie finde ich es heraus?

Was ist es
quelle

Antworten:

15

Wirklich, die todsichere Art zu testen ist, eine Textdatei herunterzuladen und sie im Terminal zu speichern und zu prüfen, ob alles in Ordnung ist.

oder kompilieren Sie das Terminal neu, indem Sie die Unicode-Option aktivieren (vorausgesetzt, es verfügt über eine).

Wie sehen $ TERM und $ LANG aus?

theman_on_osx
quelle
$ TERM ist "xterm" $ LANG ist "en_US.UTF-8" (aha!) Die Textdatei wird gut im Terminal angezeigt, aber merkwürdigerweise nicht in Firefox.
Whatsit
Ja, ich bin tatsächlich auf dasselbe gestoßen: - / ... als ich es mit dem Vorschlag versuchte, bekam ich das Fragezeichen
theman_on_osx
$ LANG teilt Ihnen nur mit, was Ihr System beim Schreiben nach stdout / stderr verwendet. Es sagt nichts über die Fähigkeiten des Terminals aus. Wenn jedoch alles, was Ihr System mit seltsamen Zeichen druckt, in Ordnung ist, unterstützt Ihr Terminal wahrscheinlich UTF-8.
Epcylon
2
Dies kann sogar automatisiert werden, indem Text angezeigt und dessen Breite überprüft wird (indem die Cursorposition davor und danach gelesen wird). Ich habe einen Proof of Concept gepostet , der etwas anderes vorschlägt.
Gilles 'SO- hör auf böse zu sein'
@ Gilles, deine Antwort ist genial einfach. Liebe es!
20

Geben Sie dies in Ihr Terminal ein:

echo -e '\xe2\x82\xac' 

Wenn Ihr Terminal UTF-8 unterstützt, wird das Euro-Zeichen ausgegeben:

user9474
quelle
Da nicht alle Schriftarten mit dem Euro-Zeichen versehen sind, ist möglicherweise ein anderer Testcodepunkt ratsam.
Michael Hampton
5

Der lahmste Weg: Folge und überprüfe die Ausgabe. Wenn das Terminal UTF-8 anzeigt, ist dies ein großes O mit Zirkumflex.

perl -le 'print "\x{c3}\x{94}"'
dak
quelle
Ich bin mir ziemlich sicher, dass mein Terminal jetzt UTF-8 unterstützt (hat den von theman_on_osx vorgeschlagenen Test bestanden), aber dies gibt nur eine Leerzeile aus. Was ist los?
Whatsit
Möglicherweise unterstützt die Schriftart, die Sie in Ihrer Terminal-App verwenden, keine UTF-8-Zeichen.
dort
4
Ich weiß, dass dies extrem spät ist, aber die UTF-8 Out-Flagge macht das besserperl -CO -le 'print "\x{d4}"'
Ashley
3
Oder geben Sie Perl ohne die Option -CO die korrekten UTF-8-Bytes: $ perl -le 'print "\ x {c3} \ x {94}"
Tim
2

Der sicherste Weg ist die Verwendung des Befehls 'locale'. Es werden alle verschiedenen Variablen ausgegeben, die bestimmen, welcher Zeichensatz verwendet werden soll. Dies ist zum Beispiel meine Ausgabe auf RHEL5.3, die standardmäßig nur UTF-8 verwendet.

LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=
Scott Pack
quelle
1
Hierdurch wird das Terminal nicht getestet, sondern nur die Ländereinstellung (die in der Praxis nicht immer vom Terminalemulator festgelegt wird, möglicherweise nicht den aktuellen Status des Terminals widerspiegelt oder möglicherweise von einer Benutzerkonfiguration überschrieben wurde).
Gilles 'SO- hör auf böse zu sein'
1

Sie können einfach den folgenden Befehl verwenden:

locale charmap
ss32
quelle
1
Das Terminal wird dadurch nicht getestet. Es werden nur die Gebietsschemaeinstellungen angezeigt.
Grawity
1
curl http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

oder

wget -O - http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

Dies erfordert offensichtlich wgetoder curl.

Janus Troelsen
quelle
-1
UTF=$(echo -e "\u263A")
if [[ ! "$UTF" =~ "A" ]]  ; then
 echo -n "UNICODE here!"
fi
computermite
quelle
2
Das Terminal wird dadurch nicht getestet. Es wird nur echogeprüft , ob das eingebaute unterstützt \u.
Grawity