2010-01-22 30 views
6

Tôi đang cố gắng để xem một UTF-8 tập tin text/suối trong less, và thậm chí nếu tôi gọi nó như thế này:LESSCHARSET = utf-8 ít dường như không làm việc

cat file | LESSCHARSET=utf-8 less 

phi Các ký tự UTF-8 tương thích -ASCII không hiển thị chính xác. Thay vào đó, giá trị hex của chúng xuất hiện được đánh dấu trong ngoặc vuông, ví dụ: <F4>.

Việc đọc cùng một văn bản trong vim với mã hóa UTF-8 không có vấn đề gì. Vì vậy, tôi nghĩ rằng có điều gì đó sai với cách tôi gọi less.

locale đầu ra của tôi là sau

LANG="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_CTYPE="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_ALL= 

phiên bản ít tôi là một trong những cài đặt bởi XCode trên OSX Leopard:

$ less --version | sed 's/^/ /' 
less 394 
Copyright (C) 1984-2005 Mark Nudelman 

less comes with NO WARRANTY, to the extent permitted by law. 
For information about the terms of redistribution, 
see the file named README in the less distribution. 
Homepage: http://www.greenwoodsoftware.com/less 

locale -a | grep US | sed 's/^/ /' kết quả đầu ra như sau:

en_AU.US-ASCII 
en_CA.US-ASCII 
en_GB.US-ASCII 
en_NZ.US-ASCII 
en_US 
en_US.ISO8859-1 
en_US.ISO8859-15 
en_US.US-ASCII 
en_US.UTF-8 

Trả lời

8
  1. Đầu ra lệnh locale là gì? Đây có phải là ngôn ngữ UTF-8 không?

  2. Bạn có chắc chắn thiết bị đầu cuối thiết bị đầu cuối của bạn được đặt để hiển thị UTF-8 không? Có echo -e '\xe2\x82\xac' sản xuất ký hiệu € (euro) không?

  3. Là ngôn ngữ mà bạn đã đặt thậm chí được cài đặt trên hệ thống? Có phải là có trong danh sách các đầu ra locale -a không?

  4. Bạn đang sử dụng phiên bản less nào? (Chạy less --version để tìm hiểu.) Thực sự, thực sự các phiên bản cũ thậm chí không hỗ trợ LESSCHARSET. ít có khả năng xảy ra, vì tôi có hệ thống Debian "sarge" với less phiên bản 382 và thậm chí không cần LESSCHARSET nếu ngôn ngữ được đặt được đặt chính xác.

+0

LANG = "en_US.UTF-8" LC_COLLATE = "en_US.UTF-8" LC_CTYPE = "en_US.UTF-8" LC_MESSAGES = "en_US.UTF-8" LC_MONETARY = "en_US.UTF-8" LC_NUMERIC = "en_US.UTF-8" LC_TIME = "en_US.UTF-8" LC_ALL = – dan

+1

Có, 'echo -e '\ xe2 \ x82 \ xac'' không tạo ra dấu euro. – dan

+0

Cảm ơn bạn đã cố gắng tìm ra điều này cho tôi. Tôi đã trả lời các câu hỏi của bạn ở trên. – dan

5

Tôi đoán rằng tệp của bạn không phải là UTF8 mà là ISO8859. (Có phải là <F4> ký tự phải là 'ô'?)

Bắt đầu xterm với LANG=en_US.ISO-8859-1 xterm. Sau đó, xác minh miền địa phương (đầu ra của locale phải là một cái gì đó như en_US.ISO-8859-1). Sau đó sử dụng ít hơn để xem tệp. Nó có hiển thị đúng không?

Lưu ý rằng không đủ để chỉ sử dụng LESSCHARSET=iso8859 mà không cần khởi động thiết bị đầu cuối mới. LESSCHARSET cho biết ít hơn để nghĩ rằng thiết bị đầu cuối có thể giải thích iso8859, nhưng thiết bị đầu cuối của bạn có thể hiển thị UTF8, vì dấu euro hiển thị chính xác. Nhưng vì \ xf4 không phải là ký tự utf8 hợp lệ, thiết bị đầu cuối có thể sẽ hiển thị một cái gì đó như ' '.

+0

Cảm ơn bạn, đây là vấn đề đối với tôi. Thiết bị đầu cuối có mã hóa đầu ra khác với ít hơn. Tôi muốn có một cách để nói ít hơn để đọc các tập tin trong một mã hóa và xuất nội dung của nó trong một mã hóa khác (hoặc mặc định, chẳng hạn như của '$ LANG'!). –

1

Hãy thử lệnh file file.txt.   Nếu, ví dụ, đầu ra là "ISO-8859 văn bản tiếng Anh", sau đó thay đổi mã hóa của tập tin từ ISO-8859 sang UTF-8 thông qua lệnh iconv -f ISO-8859-1 -t UTF-8 -o testfile.txt file.txt.  Nếu less testfile.txt hiển thị chính xác, hãy kết thúc bằng mv testfile.txt file.txt.

1

Trên Mac OS một charset phải được viết hoa:

bash-4.4$ less --version 
less 458 (POSIX regular expressions) 
Copyright (C) 1984-2012 Mark Nudelman 

bash-4.4$ LESSCHARSET=cp1251 less 
invalid charset name 

bash-4.4$ LESSCHARSET=CP1251 less 
Missing filename ("less --help" for help) 

Here tôi thấy danh sách các bảng mã:

{ "ascii",   NULL,  "8bcccbcc18b95.b" }, 
{ "utf-8",   &utf_mode, "8bcccbcc18b95.b126.bb" }, 
{ "iso8859",  NULL,  "8bcccbcc18b95.33b." }, 
{ "latin3",   NULL,  "8bcccbcc18b95.33b5.b8.b15.b4.b12.b18.b12.b." }, 
{ "arabic",   NULL,  "8bcccbcc18b95.33b.3b.7b2.13b.3b.b26.5b19.b" }, 
{ "greek",   NULL,  "8bcccbcc18b95.33b4.2b4.b3.b35.b44.b" }, 
{ "greek2005",  NULL,  "8bcccbcc18b95.33b14.b35.b44.b" }, 
{ "hebrew",   NULL,  "8bcccbcc18b95.33b.b29.32b28.2b2.b" }, 
{ "koi8-r",   NULL,  "8bcccbcc18b95.b." }, 
{ "KOI8-T",   NULL,  "8bcccbcc18b95.b8.b6.b8.b.b.5b7.3b4.b4.b3.b.b.3b." }, 
{ "georgianps",  NULL,  "8bcccbcc18b95.3b11.4b12.2b." }, 
{ "tcvn",   NULL,  "b..b...bcccbccbbb7.8b95.b48.5b." }, 
{ "TIS-620",  NULL,  "8bcccbcc18b95.b.4b.11b7.8b." }, 
{ "next",   NULL,  "8bcccbcc18b95.bb125.bb" }, 
{ "dos",   NULL,  "8bcccbcc12bc5b95.b." }, 
{ "windows-1251", NULL,  "8bcccbcc12bc5b95.b24.b." }, 
{ "windows-1252", NULL,  "8bcccbcc12bc5b95.b.b11.b.2b12.b." }, 
{ "windows-1255", NULL,  "8bcccbcc12bc5b95.b.b8.b.5b9.b.4b." }, 
{ "ebcdic",   NULL,  "5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b." }, 
{ "IBM-1047",  NULL,  "4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b" }, 
{ NULL, NULL, NULL } 

và bí danh của họ:

{ "UTF-8",   "utf-8" }, 
{ "ANSI_X3.4-1968", "ascii" }, 
{ "US-ASCII",  "ascii" }, 
{ "latin1",   "iso8859" }, 
{ "ISO-8859-1",  "iso8859" }, 
{ "latin9",   "iso8859" }, 
{ "ISO-8859-15", "iso8859" }, 
{ "latin2",   "iso8859" }, 
{ "ISO-8859-2",  "iso8859" }, 
{ "ISO-8859-3",  "latin3" }, 
{ "latin4",   "iso8859" }, 
{ "ISO-8859-4",  "iso8859" }, 
{ "cyrillic",  "iso8859" }, 
{ "ISO-8859-5",  "iso8859" }, 
{ "ISO-8859-6",  "arabic" }, 
{ "ISO-8859-7",  "greek" }, 
{ "IBM9005",  "greek2005" }, 
{ "ISO-8859-8",  "hebrew" }, 
{ "latin5",   "iso8859" }, 
{ "ISO-8859-9",  "iso8859" }, 
{ "latin6",   "iso8859" }, 
{ "ISO-8859-10", "iso8859" }, 
{ "latin7",   "iso8859" }, 
{ "ISO-8859-13", "iso8859" }, 
{ "latin8",   "iso8859" }, 
{ "ISO-8859-14", "iso8859" }, 
{ "latin10",  "iso8859" }, 
{ "ISO-8859-16", "iso8859" }, 
{ "IBM437",   "dos" }, 
{ "EBCDIC-US",  "ebcdic" }, 
{ "IBM1047",  "IBM-1047" }, 
{ "KOI8-R",   "koi8-r" }, 
{ "KOI8-U",   "koi8-r" }, 
{ "GEORGIAN-PS", "georgianps" }, 
{ "TCVN5712-1",  "tcvn" }, 
{ "NEXTSTEP",  "next" }, 
{ "windows",  "windows-1252" }, /* backward compatibility */ 
{ "CP1251",   "windows-1251" }, 
{ "CP1252",   "windows-1252" }, 
{ "CP1255",   "windows-1255" }, 
{ NULL, NULL } 
Các vấn đề liên quan