Versuch 1:
$ less subs.srt
"subs.srt" may be a binary file. See it anyway?
<C8><F2><E0><EB><FC><FF><ED> ...
Versuch 2:
$ LANG=ru_RU.CP1251 less subs.srt
����� �����, ��� ������.
��� ������� �������������! ...
Problemumgehung:
$ iconv -f cp1251 < subs.srt | less
Wie mache ich das bequem?
Antwort1
Um less
eine andere Kodierung als die des Terminals auszuführen, verwenden Sieluit(das im Lieferumfang der X11-Dienstprogrammsuite enthalten ist).
LANG=ru_RU.CP1251 luit less subs.srt
Wenn Sie die Kodierung automatisch erkennen möchten, ist das schwieriger, da eine Textdatei keinen Hinweis auf ihre Kodierung enthält. Die SoftwareEncaversucht, die Kodierung einer Datei anhand ihrer Sprache zu erkennen:
$ enca -L russian subs.srt
MS-Windows code page 1251
$ iconv -f "$(enca -iL russian subs.srt)" | less
Sie können diese Kombination als LESSOPEN
Filter verwenden (sieheWie kann ich gzippte Dateien in Less anzeigen, ohne zless eingeben zu müssen?für ein Beispiel). Das führt jedoch möglicherweise nicht zu guten Ergebnissen bei Texten, die nicht tatsächlich auf Russisch sind.
Wenn Sie nur UTF-8 und CP1251 verwenden, können Sie auf CP1251 zurückgreifen, wenn eine Dateiist kein gültiges UTF-8— es gibt „Lücken“ in UTF-8, die dazu führen, dass die meisten Dateien in einer 8-Bit-Kodierung kein gültiges UTF-8 sind. Proof-of-Concept-Filterskript für (funktioniert möglicherweise nicht auf anderen Systemen als Linux, da es auf dem Lesen von genau N Bytes LESSOPEN
beruht ):head -c N
#!/bin/sh
head=$(head -c 1000)
if printf '%s\n' "$head" | grep -qav '^.*$'; then
{ printf '%s\n' "$head"; cat; } | iconv -f CP1251
else
{ printf '%s\n' "$head"; cat; }
fi