UTF8 en bash script
Hola,
Estic fent un bash script i a l’hora de filtrar un fitxer mitjançant ordres com grep, cat, sed, etc. no hem detecta correctament els accents, suposo que és per culpa de la codificació.
Com puc fer per que hem detecti els accents?
Adjunto la sortida de $locale -a i $locale
[code:1mvm601p]
$locale -a
C
ca_AD.utf8
ca_ES.utf8
ca_ES.utf8@valencia
ca_FR.utf8
ca_IT.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZW.utf8
POSIX
[/code:1mvm601p]
[code:1mvm601p]
$locale
LANG=ca_ES.utf8
LC_CTYPE="ca_ES.utf8"
LC_NUMERIC="ca_ES.utf8"
LC_TIME="ca_ES.utf8"
LC_COLLATE="ca_ES.utf8"
LC_MONETARY="ca_ES.utf8"
LC_MESSAGES="ca_ES.utf8"
LC_PAPER="ca_ES.utf8"
LC_NAME="ca_ES.utf8"
LC_ADDRESS="ca_ES.utf8"
LC_TELEPHONE="ca_ES.utf8"
LC_MEASUREMENT="ca_ES.utf8"
LC_IDENTIFICATION="ca_ES.utf8"
LC_ALL=
[/code:1mvm601p]
Gràcies,






A què et refereixes exactament? D’on llegeixes les dades? S’entren per terminal, o provenen d’un fitxer? O és en la pròpia shell, on no et detecta correctament els accents?
Si és d’un fitxer, o si és la pròpia shell, exeucta l’ordre següent i dige’ns què et retorna:
[code:3642ej6y]file nom_fitxer[/code:3642ej6y]
Salut!
Ha estat d'ajuda aquesta resposta?
LikeDislike[code:3eqhtzq0]$ file codifont.html
codifont.html: Non-ISO extended-ASCII HTML document text, with very long lines, with CRLF, LF line terminators[/code:3eqhtzq0]
El fitxer codifont.html l'he descarregat mitjançant wget i si utilitzo el gedit es veuen els accents.
Si utilitzo cat o grep per exemple
[code:3eqhtzq0]$grep /title codifont.html[/code:3eqhtzq0]
la sortida no detecta els accents.
Estic fent servir aquestes comandes en un bash script utilitzant tuberies, conjuntament amb sed.
Salut!
Ha estat d'ajuda aquesta resposta?
LikeDislikeHola,
Com veus amb el "file", el fitxer està en ASCII, i el teu sistema té codificació UTF-8. Quan l’obres amb gedit, o fins i tot amb altres editors de terminal com "vi", aquests detecten quina codificació de caràcters utilitza, i la utilitza per a mostrar-te el fitxer, per això ho veus bé. Per a aquest tipus de problemes, el "file" és molt útil.
Prova de transformar-lo a UTF-8. Per a fer-ho, hi ha un altre programa molt útil: iconv. Executa el següent:
[code:6bo37zey]iconv -f ASCII -t UTF-8 codifont.html > codifont_utf8.html[/code:6bo37zey]
Això et deixarà el fitxer codifont_utf8.html en UTF-8. De tota manera, la sortida de l'ordre "file" donava un missatge una mica estrany, indicant que són línies molt llargues, i que és un ASCII no-ISO. Normalment, et diu que és ISO-8859-15 o ISO-8859-1. Però bé, de moment prova el que t'he dit de l'iconv. Si no et funcionés, torna a avisar.
Salut!
Ha estat d'ajuda aquesta resposta?
LikeDislikeGràcies per la contestació, he fet el que m’has dit i aquesta es la sortida.
[code:34wbn5vn]$ iconv -f ASCII -t UTF-8 codifont.html > codifont_utf8.html
iconv: illegal input sequence at position 99[/code:34wbn5vn]
M'ha creat el fitxer codifont_utf8.html però aquest no està complet, quan arriba al que sería el primer accent s'acaba el fitxer, suposo que l'opció de l'entrada no és correcte.(?)
També he provat un altre programa que fa el mateix, convmv.Sense èxit.
(Vist aquí: http://www.linuxquestions.org/questions ... es-506114/)
[code:34wbn5vn]$ convmv -f ASCII -t UTF-8 codifont.html > codifont_utf8.html
Starting a dry run without changes...
No changes to your files done. Use --notest to finally rename the files.[/code:34wbn5vn]
En aquest cas el fitxer resultant és només conté : "Your Perl version has fleas #37757 #49830 "
Ha estat d'ajuda aquesta resposta?
LikeDislikeSOLUCIONAT
[code:3rh3se34]$iconv -f ISO-8859-15 -t UTF-8 codifont.html > codifont_utf8.html[/code:3rh3se34]
Al gedit he vist que la codificació era ISO-8859-15, ara ja puc treballar amb el grep, el cat i tots aquestes comandes.
Gràcies per l'ajuda.
Ha estat d'ajuda aquesta resposta?
LikeDislikeDe res.
Normalment, el "file" hauria d’haver detectat aquesta codificació, però si ho has vist pel gedit, ja està bé. Com t’he comentat, és un dels ASCII més habituals.
Ha estat d'ajuda aquesta resposta?
LikeDislike