2010-01-22 3 views
6

Sto cercando di visualizzare un UTF-8 file di testo/flusso in less, e anche se invoco così:LESSCHARSET = utf-8 meno non sembra funzionare

cat file | LESSCHARSET=utf-8 less 

la non -I caratteri UTF-8 compatibili con ASCII non vengono visualizzati correttamente. Invece, i loro valori esadecimali appaiono evidenziati tra parentesi, ad es. <F4>.

Lo leggere lo stesso testo in vim con UTF-8 codifica pone alcun problema. Quindi sto pensando che qualcosa non va nel modo in cui sto invocando less.

mio locale uscita è il seguente

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= 

mio meno versione è quella installata da XCode su OSX Leopard:

$ less --version | sed 's/^/ /' 
less 394 
Copyright (C) 1984-2005 Mark Nudelman 

less comes with NO WARRANTY, to the extent permitted by law. 
For information about the terms of redistribution, 
see the file named README in the less distribution. 
Homepage: http://www.greenwoodsoftware.com/less 

locale -a | grep US | sed 's/^/ /' emette il seguente:

en_AU.US-ASCII 
en_CA.US-ASCII 
en_GB.US-ASCII 
en_NZ.US-ASCII 
en_US 
en_US.ISO8859-1 
en_US.ISO8859-15 
en_US.US-ASCII 
en_US.UTF-8 

risposta

8
  1. Cosa produce il comando locale? È un locale UTF-8?

  2. Sei sicuro che il tuo terminale è impostato per visualizzare UTF-8? Il echo -e '\xe2\x82\xac' produce il segno € (euro)?

  3. è la versione locale che si è impostato anche installato sul sistema? È presente nell'elenco le uscite locale -a?

  4. Quale versione di less stai usando? (Run less --version per scoprirlo.) Davvero, davvero vecchie versioni non ha nemmeno supportano LESSCHARSET. Questo è meno probabile che sia il caso, perché ho un sistema Debian "sarge" con less la versione 382, ​​e non ha nemmeno bisogno LESSCHARSET se il locale è impostato correttamente.

+0

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 = – dan

+1

Sì, 'echo -e '\ xe2 \ x82 \ xac'' produce il simbolo dell'euro. – dan

+0

Grazie per aver cercato di capirlo. Ho risposto alle tue domande sopra. – dan

5

La mia ipotesi è che il file non sia UTF8 ma piuttosto ISO8859. (È il > carattere F4 > supposto essere un "?"?

Avviare un xterm con LANG=en_US.ISO-8859-1 xterm. Quindi verifica le impostazioni internazionali (l'output di locale dovrebbe essere qualcosa come en_US.ISO-8859-1). Quindi usa meno per vedere il file. È visualizzato correttamente?

Si noti che non è sufficiente utilizzare solo LESSCHARSET=iso8859 senza avviare un nuovo terminale. LESSCHARSET dice meno di pensare che il terminale possa interpretare iso8859, ma il tuo terminale probabilmente visualizza UTF8, poiché il simbolo dell'euro viene visualizzato correttamente. Ma dato che \ xf4 non è un carattere utf8 valido, il terminale probabilmente mostrerà qualcosa come ' '.

+0

Grazie, questo era il problema per me. Il terminale aveva una codifica di uscita diversa da meno. Vorrei che ci fosse un modo per dire di meno per leggere il file in una codifica e inviarne il contenuto in un altro (o l'impostazione predefinita, come quella di '$ LANG'!). –

1

Prova il comando file file.txt.   Se, ad esempio, l'output è "ISO-8859 English text", modificare la codifica del file da ISO-8859 a UTF-8 tramite il comando iconv -f ISO-8859-1 -t UTF-8 -o testfile.txt file.txt.  Se less testfile.txt viene visualizzato correttamente, terminare con mv testfile.txt file.txt.

1

Su Mac OS un set di caratteri devono essere in maiuscolo:

bash-4.4$ less --version 
less 458 (POSIX regular expressions) 
Copyright (C) 1984-2012 Mark Nudelman 

bash-4.4$ LESSCHARSET=cp1251 less 
invalid charset name 

bash-4.4$ LESSCHARSET=CP1251 less 
Missing filename ("less --help" for help) 

Here ho trovato la lista dei set di caratteri:

{ "ascii",   NULL,  "8bcccbcc18b95.b" }, 
{ "utf-8",   &utf_mode, "8bcccbcc18b95.b126.bb" }, 
{ "iso8859",  NULL,  "8bcccbcc18b95.33b." }, 
{ "latin3",   NULL,  "8bcccbcc18b95.33b5.b8.b15.b4.b12.b18.b12.b." }, 
{ "arabic",   NULL,  "8bcccbcc18b95.33b.3b.7b2.13b.3b.b26.5b19.b" }, 
{ "greek",   NULL,  "8bcccbcc18b95.33b4.2b4.b3.b35.b44.b" }, 
{ "greek2005",  NULL,  "8bcccbcc18b95.33b14.b35.b44.b" }, 
{ "hebrew",   NULL,  "8bcccbcc18b95.33b.b29.32b28.2b2.b" }, 
{ "koi8-r",   NULL,  "8bcccbcc18b95.b." }, 
{ "KOI8-T",   NULL,  "8bcccbcc18b95.b8.b6.b8.b.b.5b7.3b4.b4.b3.b.b.3b." }, 
{ "georgianps",  NULL,  "8bcccbcc18b95.3b11.4b12.2b." }, 
{ "tcvn",   NULL,  "b..b...bcccbccbbb7.8b95.b48.5b." }, 
{ "TIS-620",  NULL,  "8bcccbcc18b95.b.4b.11b7.8b." }, 
{ "next",   NULL,  "8bcccbcc18b95.bb125.bb" }, 
{ "dos",   NULL,  "8bcccbcc12bc5b95.b." }, 
{ "windows-1251", NULL,  "8bcccbcc12bc5b95.b24.b." }, 
{ "windows-1252", NULL,  "8bcccbcc12bc5b95.b.b11.b.2b12.b." }, 
{ "windows-1255", NULL,  "8bcccbcc12bc5b95.b.b8.b.5b9.b.4b." }, 
{ "ebcdic",   NULL,  "5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b." }, 
{ "IBM-1047",  NULL,  "4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b" }, 
{ NULL, NULL, NULL } 

ed i loro pseudonimi:

{ "UTF-8",   "utf-8" }, 
{ "ANSI_X3.4-1968", "ascii" }, 
{ "US-ASCII",  "ascii" }, 
{ "latin1",   "iso8859" }, 
{ "ISO-8859-1",  "iso8859" }, 
{ "latin9",   "iso8859" }, 
{ "ISO-8859-15", "iso8859" }, 
{ "latin2",   "iso8859" }, 
{ "ISO-8859-2",  "iso8859" }, 
{ "ISO-8859-3",  "latin3" }, 
{ "latin4",   "iso8859" }, 
{ "ISO-8859-4",  "iso8859" }, 
{ "cyrillic",  "iso8859" }, 
{ "ISO-8859-5",  "iso8859" }, 
{ "ISO-8859-6",  "arabic" }, 
{ "ISO-8859-7",  "greek" }, 
{ "IBM9005",  "greek2005" }, 
{ "ISO-8859-8",  "hebrew" }, 
{ "latin5",   "iso8859" }, 
{ "ISO-8859-9",  "iso8859" }, 
{ "latin6",   "iso8859" }, 
{ "ISO-8859-10", "iso8859" }, 
{ "latin7",   "iso8859" }, 
{ "ISO-8859-13", "iso8859" }, 
{ "latin8",   "iso8859" }, 
{ "ISO-8859-14", "iso8859" }, 
{ "latin10",  "iso8859" }, 
{ "ISO-8859-16", "iso8859" }, 
{ "IBM437",   "dos" }, 
{ "EBCDIC-US",  "ebcdic" }, 
{ "IBM1047",  "IBM-1047" }, 
{ "KOI8-R",   "koi8-r" }, 
{ "KOI8-U",   "koi8-r" }, 
{ "GEORGIAN-PS", "georgianps" }, 
{ "TCVN5712-1",  "tcvn" }, 
{ "NEXTSTEP",  "next" }, 
{ "windows",  "windows-1252" }, /* backward compatibility */ 
{ "CP1251",   "windows-1251" }, 
{ "CP1252",   "windows-1252" }, 
{ "CP1255",   "windows-1255" }, 
{ NULL, NULL }