Txt dosyasının kodlamasını değiştir


16

Yazdığımda:

file file1.txt 

Ben bu çıktı var: Küçük-endian UTF-16 CR satır sonlandırıcılar ile Unicode metin

O zaman yazarsam:

file file2.txt 

Ben var: ASCII metin

file2.txt yapılarak oluşturulur:

echo $var > "file2.txt"

File2.txt dosyasının file1.txt ile aynı kodlamaya sahip olmasını istiyorum. Bunu nasıl yapabilirim ?

Yanıtlar:


25

iconvDosyanın kodlamasını dönüştürmek için kullanabilirsiniz :

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

another.txt daha sonra istenen kodlamaya sahip olmalıdır.

Bunu da deneyebilirsiniz:

echo $var | iconv -f ascii -t utf16 > "file2.txt"

7

İconv kullanın:

echo "$var" | iconv --from-code=utf-8 --to-code=utf-16le --output=file2.txt

0

Dosyanızı dönüştürürken, bayt sırası işareti içerdiğinden emin olmalısınız. Olsa standart bayt sırası işareti UTF-8 için tavsiye edilmez diyor , bir bayt sırası işareti olmadan UTF-8 ve ASCII arasında meşru hercümercler olabilir .

Ek olarak, bayt sıralı bir işaret belirtmek UTF-16BEveya hazırlamamaktadır , bu yüzden ilk önce platforma bağlı bir endianness kullanan dönüştürmeye başladım . Sonra, asıl endikliği ve ondan dönüşüme belirlemek için kullanıyorum .UTF-16LE UTF-16fileUTF-16LE

Eğer kullanarak dosya oluşturmak Son olarak, bashdosya aldığı bash'ın locale charmapbu aralarından haritasına gerekenler nedenle, kodlamayı.

(Tüm kodlamalarımı büyük harflerle yazarım çünkü tüm iconvdesteklenen kodlamaları iconv -ltümüyle büyük harflerle yazıyorsunuz .)

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

Bunu reddetmiş olsaydın nedenini açıklar mısın?
Heath Borders
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.