Thay đổi mã hóa của tệp txt


15

Khi tôi viết:

file file1.txt 

Tôi có đầu ra này: Văn bản Unicode UTF-16 nhỏ cuối cùng, với các đầu cuối dòng CR

Sau đó, nếu tôi viết:

file file2.txt 

Tôi có : Văn bản ASCII

file2.txt được tạo bằng cách tạo:

echo $var > "file2.txt"

Tôi muốn file2.txt có cùng mã hóa với file1.txt. Làm thế nào tôi có thể làm điều đó ?

Câu trả lời:


23

Bạn có thể dùng iconv để chuyển đổi mã hóa của tập tin:

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

another.txt sau đó nên có mã hóa mong muốn.

Bạn cũng có thể thử điều này:

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


1

Khi chuyển đổi tệp của bạn, bạn nên chắc chắn rằng nó chứa dấu thứ tự byte. Mặc du tiêu chuẩn nói rằng dấu thứ tự byte không được khuyến nghị cho UTF-8 , có thể có sự nhầm lẫn hợp pháp giữa UTF-8 và ASCII mà không có dấu thứ tự byte .

Ngoài ra, chỉ định UTF-16BE hoặc là UTF-16LE không trả trước một dấu thứ tự byte , vì vậy trước tiên tôi chuyển đổi sang UTF-16, trong đó sử dụng một endianness phụ thuộc nền tảng. Sau đó, tôi sử dụng file để xác định tuổi thọ thực tế và chuyển đổi từ đó sang UTF-16LE.

Cuối cùng, khi bạn tạo một tệp bằng cách sử dụng bash, tập tin nhận được bash 'S locale charmap mã hóa, vì vậy đó là những gì bạn cần ánh xạ từ.

(Tôi viết hoa tất cả các mã hóa của tôi bởi vì khi bạn liệt kê tất cả iconv mã hóa được hỗ trợ với iconv -l chúng đều là chữ hoa.)

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.