Alterar codificação do arquivo txt

16

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 criando:

echo $var > "file2.txt"

Gostaria que o arquivo2.txt tenha a mesma codificação que o arquivo1.txt. Como eu posso fazer isso ?

Pierre
fonte

Respostas:

25

Você pode usar iconvpara 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 o seguinte:

echo $var | iconv -f ascii -t utf16 > "file2.txt"
Der Hochstapler
fonte
7

Use iconv:

echo "$var" | iconv --from-code=utf-8 --to-code=utf-16le --output=file2.txt
Aluísio ASG
fonte
0

Ao converter seu arquivo, verifique se ele contém uma marca de ordem de bytes. Embora o padrão diga que uma marca de ordem de bytes não é recomendada para UTF-8 , pode haver confusões legítimas entre UTF-8 e ASCII sem uma marca de ordem de bytes .

Além disso, especificando UTF-16BEou UTF-16LE não acrescentando uma marca de ordem de byte , primeiro eu me converto em UTF-16, que usa um endianness dependente da plataforma. Então, eu uso filepara determinar a endianness real e a conversão disso para UTF-16LE.

Finalmente, quando você cria um arquivo usando bash, o arquivo recebe basha locale charmapcodificação, e é disso que você precisa mapear.

(Eu coloco todas as minhas codificações em maiúsculas, porque quando você lista todas iconvas codificações suportadas com iconv -ltodas elas estão em 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
Heath Borders
fonte
Se você votou negativamente, explicaria por quê?
Heath Borders