Como visualizo o arquivo de texto cp1251 no console UTF-8?

5

Tentativa 1:

$ less subs.srt
"subs.srt" may be a binary file.  See it anyway? 
<C8><F2><E0><EB><FC><FF><ED> ...

Tentativa 2:

$ LANG=ru_RU.CP1251 less subs.srt
����� �����, ��� ������.
��� ������� �������������! ...

Solução alternativa:

$ iconv -f cp1251 < subs.srt | less

Como faço isso de maneira conveniente?

    
por Vi. 08.01.2015 / 23:19

1 resposta

6

Para fazer com que less seja executado em uma codificação diferente da do terminal, use luit (que acompanha o utilitário X11 suite).

LANG=ru_RU.CP1251 luit less subs.srt

Se você quiser detectar a codificação automaticamente, isso é mais complicado, porque um arquivo de texto não tem indicação de sua codificação. O software Enca tenta reconhecer a codificação de um arquivo com base em sua linguagem:

$ enca -L russian subs.srt
MS-Windows code page 1251
$ iconv -f "$(enca -iL russian subs.srt)" | less

Você pode tornar essa combinação um filtro LESSOPEN (consulte Como posso ver arquivos gzipados em menos sem ter que digitar zless? por exemplo. Isso pode não dar bons resultados para textos que não estão em russo, no entanto.

Se você usa somente UTF-8 e CP1251, pode voltar para o CP1251 quando um arquivo isn ' t válido UTF-8 - existem “buracos” em UTF-8 que fazem com que a maioria dos arquivos em uma codificação de 8 bits não seja válida em UTF-8. Script de filtro de prova de conceito para LESSOPEN (pode não funcionar em outros sistemas além do Linux, porque depende de head -c N que lê exatamente N bytes):

#!/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
    
por 09.01.2015 / 00:22