Mã hóa ký tự được hỗ trợ bởi nhiều hơn, mèo và ít hơn


18

Tôi có một tệp văn bản được mã hóa như sau file:

Văn bản ISO-8859, với các đầu cuối dòng CRLF

Tập tin này chứa văn bản tiếng Pháp có dấu. Shell của tôi có thể hiển thị dấu và emacstrong chế độ bảng điều khiển có khả năng hiển thị chính xác các dấu này.

Vấn đề của tôi là more, catlesscác công cụ không hiển thị chính xác tệp này. Tôi đoán rằng điều đó có nghĩa là các công cụ này không hỗ trợ bộ mã hóa ký tự này. Điều này có đúng không? Các mã hóa ký tự được hỗ trợ bởi các công cụ này là gì?

Câu trả lời:


17

Shell của bạn có thể hiển thị các dấu, v.v. vì có lẽ nó đang sử dụng UTF-8. Vì tệp được đề cập là một mã hóa khác nhau less morecatđang cố đọc nó dưới dạng UTF và không thành công. Bạn có thể kiểm tra mã hóa hiện tại của mình với

echo $LANG

Bạn có hai lựa chọn, bạn có thể thay đổi mã hóa mặc định hoặc thay đổi tệp thành UTF-8. Để thay đổi mã hóa của bạn, hãy mở một thiết bị đầu cuối và gõ

export LANG="fr_FR.ISO-8859"

Ví dụ:

$ echo $LANG 
en_US.UTF-8
$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ export LANG="fr_FR.ISO-8859"
$ xterm <-- open a new terminal 
$ cat foo.txt 
J'ai mal à la tête, c'est chiant!

Nếu bạn đang sử dụng gnome-terminalhoặc tương tự, bạn có thể cần kích hoạt mã hóa, ví dụ như terminatornhấp chuột phải và:

nhập mô tả hình ảnh ở đây

Dành cho gnome-terminal:

nhập mô tả hình ảnh ở đây

Tùy chọn khác (tốt hơn) của bạn là thay đổi mã hóa của tệp:

$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ iconv -f ISO-8859-1 -t UTF-8  foo.txt > bar.txt
$ cat bar.txt 
J'ai mal à la tête, c'est chiant!

4

Mã hóa ký tự ISO-8858 hơi lỗi thời đối với các hệ thống Linux. Toàn bộ hệ thống Linux của bạn có khả năng sử dụng UTF-8 mọi cách. Bao gồm trình giả lập thiết bị đầu cuối và vỏ của bạn.

Tuy nhiên. cat, greplesskhông làm bất kỳ chuyển đổi mã hóa, họ sẽ đối xử với tiêu chuẩn ISO-8859 / file latin1 của bạn như UTF-8, mà sẽ không làm việc.

Nếu emacs có thể hiển thị chúng, thì đó là vì nó cố gắng tự động phát hiện mã hóa được sử dụng và rõ ràng là thành công. Nói với emacs để lưu tệp dưới dạng UTF-8 và bạn sẽ có thể sử dụng cat/ grep/ bất cứ thứ gì trên đó.

Nếu bạn biết mã hóa ký tự chính xác (ISO-8859 là tập hợp của chúng, bạn phải biết chính xác mã hóa: ISO-8859-1 hoặc ISO-8859-15 hoặc tệ hơn), bạn cũng có thể chuyển đổi các tệp của mình từ dòng lệnh :

iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8

2

Cat, More and Less chỉ đang làm công việc hiển thị tệp. Dịch giữa các bảng mã không có trong mô tả công việc của họ. Việc mã hóa các dòng mới không phải là vấn đề vì CRLF được hiển thị giống như dòng bình thường kết thúc với LF, nhưng thiết bị đầu cuối của bạn có thể đang mong đợi văn bản được mã hóa UTF-8, là tiêu chuẩn thực tế hiện nay.

Luit dịch giữa các bảng mã được hỗ trợ và UTF-8. Bạn nói với Luit mã hóa nào cần dịch bằng cách đặt LC_CTYPEbiến môi trường hoặc với -encodingtùy chọn. Ví dụ: để hiển thị tệp latin-1 (còn gọi là ISO 8859-1):

LC_CTYPE=en_US luit less somefile
luit -encoding ISO8859-1 less somefile

Nếu tệp nằm trong một số mã hóa kỳ lạ mà Luit không hỗ trợ, bạn có thể chuyển nó qua chương trình dịch. Iconv hỗ trợ nhiều bảng mã.

iconv -f latin1 somefile
iconv -f latin1 somefile | less
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.