Altera a codificação do arquivo txt

14

Quando escrevo:

file file1.txt 

Eu tenho esta saída: Texto Unicode UTF-16 Little-endian, com terminadores de linha CR

Então, se eu escrever:

file file2.txt 

Eu tenho: texto ASCII

file2.txt é criado fazendo:

echo $var > "file2.txt"

Eu gostaria que o arquivo2.txt tivesse a mesma codificação que o arquivo1.txt. Como posso fazer isso?

    
por Pierre 19.02.2013 / 17:40

3 respostas

22

Você pode usar iconv para converter a codificação do arquivo:

iconv -f ascii -t utf16 file2.txt > another.txt

another.txt deve então ter a codificação desejada.

Você também pode tentar isso:

echo $var | iconv -f ascii -t utf16 > "file2.txt"
    
por 19.02.2013 / 17:45
7

Use o iconv:

echo "$var" | iconv --from-code=utf-8 --to-code=utf-16le --output=file2.txt
    
por 19.02.2013 / 17:45
1

Ao converter seu arquivo, você deve ter certeza de que ele contém uma marca de ordem de byte. Embora a norma indique que um byte-order-mark não é recomendado para UTF-8 , pode haver confusões legítimas entre UTF-8 e ASCII sem uma marca de ordem de byte .

Além disso, a especificação de UTF-16BE ou UTF-16LE não prefixa uma marca de ordem de byte , portanto, primeiro converter para UTF-16 , que usa um endianness dependente de plataforma. Então, eu uso file para determinar o endianness atual e o convertido daquele para UTF-16LE .

Por fim, quando você cria um arquivo usando bash , o arquivo recebe a codificação bash de locale charmap , e é isso que você precisa mapear.

(em maiúsculas todas as minhas codificações porque quando você lista todas as codificações suportadas de iconv com iconv -l elas são todas maiúsculas.)

BASH_ENCODING="$( locale charmap | tr [:lower:] [:upper:] )"
echo $var | iconv -f "$BASH_ENCODING" -t UTF-16 > UTF-16-UNKNOWN-ENDIANNESS-FILE
FILE_ENCODING="$( file --brief --mime-encoding UTF-16-UNKNOWN-ENDIANNESS-FILE )"
iconv -f "$FILE_ENCODING" -t UTF-16LE UTF-16-UNKNOWN-ENDIANNESS-FILE > file2.txt
    
por 27.01.2016 / 19:58