Làm cách nào để đọc các ký tự ẩn của tệp văn bản?


6

Tôi đã tạo một tệp văn bản từ một ứng dụng mà tôi đã phát triển.

Khi tôi gửi tệp văn bản tới Xác nhận hệ thống , họ (hệ thống bên thứ ba) nói rằng tập tin không hợp lệ và rằng tập tin chứa ba ký tự ở đầu của tập tin không được phép là tốt ký tự đặc biệt không đúng .

Họ cũng nói tôi cần sử dụng ISO 8859-1 hoặc là PC850 .

Chà, tôi đang sử dụng Notepad ++ và tôi không thể thấy điều đó cả! Trình đọc tệp văn bản tốt nhất cho các loại vấn đề này là gì?

Alt text

Tôi cũng có một máy Mac và chỉ nghĩ rằng tôi nhớ mở TextMate ... Ôi! Bây giờ tôi biết những gì họ đang nói về!

Làm thế nào tôi có thể có cùng trong Windows?

Alt text


Ở một khía cạnh khác: bạn đang xem Dấu hiệu đơn hàng UTF (BOM) của tài liệu được mã hóa UTF-8. Nếu một ứng dụng có các phương tiện khác để nói với UTF-8, thì BOM như vậy không bắt buộc đối với nội dung mã hóa UTF-8, nhưng một biên tập viên giỏi biết cách xử lý nó. Xem unicode.org/faq/utf_bom.html#bom2
Arjan

(Trên máy Mac, cũng thấy file lệnh, để cho biết nếu có BOM.)
Arjan

Nhân tiện, một cách nhanh chóng để thực thi mã hóa sai trên bất kỳ máy tính nào: mở tệp trong trình duyệt và đặt mã hóa thành ISO-8895-1 giống như bạn đã làm trong TextMate. Tiếp theo, thực hiện Xem nguồn cho tệp.
Arjan

@Arjan không chỉ là máy Mac. Bất kỳ hệ thống dựa trên * nix nào, dù là linux hay * nix. Và dù sao đi nữa, lệnh xxd -p hiển thị các byte thực tế nên tốt hơn nhiều.
barlop

Câu trả lời:


3

Chà, tôi đang sử dụng NotePad ++ và tôi hoàn toàn không thể thấy điều đó! Trình đọc tệp văn bản tốt nhất cho loại vấn đề này là gì?

Vấn đề là, một trình soạn thảo văn bản, có thể tải tất cả các mã hóa văn bản một cách trong suốt - ngay cả những trình duyệt bị hỏng ngu ngốc như UTF-8-plus-BOM - sẽ ngăn bạn nhìn thấy vấn đề. Chắc chắn, một trình soạn thảo văn bản tốt sẽ lưu UTF-8 mà không có BOM giả, hoặc ít nhất cung cấp cho bạn tùy chọn để làm như vậy, nhưng bạn sẽ không biết lưu lại nếu bạn không thấy BOM giả ở đó .

Lý do bạn thấy ba byte cao khi bắt đầu tệp trong TextMate thực sự là vì TextMate đã hiểu sai và đoán mã hóa là Latin-1 thay vì UTF-8. Điều này có lẽ tái tạo hành vi của dịch vụ mà bạn gửi mà không biết về Unicode, nhưng bản thân nó không thực sự là một tính năng mong muốn. Đó cũng là lý do tại sao æ S và ø S chưa đi ra.

Nếu bạn muốn xem rõ ràng từng byte trong tệp, những gì bạn muốn không thực sự là trình soạn thảo văn bản, mà là trình soạn thảo hex. Có rất nhiều để lựa chọn, ví dụ. xvi32 trên Windows.

Và sau đó sửa ứng dụng của bạn để không tạo ra BOM không có thật; dù sao họ cũng không có chỗ trong tệp UTF-8, không bao giờ bận tâm đến các vấn đề mà nó gây ra cho các ứng dụng không phải là Unicode. [Tôi không biết ứng dụng được viết trong đó là gì, nhưng một nguyên nhân phổ biến của các BOM không mong muốn là sử dụng .NET Encoding.UTF8 mã hóa. Một new UTF8Encoding(false) sẽ thích hợp hơn.]

Cho dù dịch vụ bạn đang gửi đến muốn UTF-8 hay một số mã hóa khác trong mọi trường hợp, bạn sẽ phải hỏi các nhà khai thác dịch vụ đó. Nếu họ đã mô tả các byte cao cho æ et al trong tập tin của bạn vốn dĩ là không hợp lệ, bạn có thể phải đối mặt với tình huống họ không hỗ trợ bất kỳ ký tự không phải ASCII nào, trong trường hợp đó bạn sẽ phải xem xét chuyển ngữ các ký tự phù hợp cho ngôn ngữ đích, ví dụ. æ - & gt; ae.


1
Tôi không nghĩ rằng TextMate đã hiểu sai. Có vẻ như mã hóa văn bản đã được thay đổi thủ công thành Windows Latin-1.
Arko

BOM không có thật; dù sao họ cũng không có chỗ trong tệp UTF-8 - điều đó đúng trong hầu hết các luồng dữ liệu và cho XML / HTML các tập tin (cung cấp các phương tiện khác để chỉ định mã hóa) và cho hầu hết các tệp khác, nhưng không nhất thiết phải cho tất cả các các tập tin. Nếu một ứng dụng cần quét toàn bộ tệp để đoán xem có thứ gì đó là UTF-8 không thì BOM có thể khá hữu ích. Mặc dù nó sẽ không xác định thực tế thứ tự byte , nó chỉ ra đó là UTF-8. Và trong chính câu hỏi này, sự hiện diện thực sự khá tốt, vì nó cho thấy nó được xuất ra rõ ràng là UTF-8, không phải là ISO 8859-1 hay PC850 được yêu cầu. ;-)
Arjan

xvi32 là một trợ giúp tuyệt vời ... tình yêu không phải đoán thứ hai ngay cả một trình soạn thảo văn bản "tốt" khi điều tôi muốn là xem dữ liệu thô - nhưng không quá thô :) -.
Mike M

4

Một cách dễ dàng để xem loại nội dung này trong Windows là sử dụng lệnh "type".

Tôi sẽ làm một cái gì đó như thế này:

type filename.txt | more

-1 đó là một cách khủng khiếp, nó sẽ diễn giải hex là ascii khi nó không, hoặc nó cung cấp một số thứ như bom LE unicode và không hiển thị /. ví dụ. lưu một tệp dưới dạng unicode đó là unicode LE trong notepad. Xem hex với xxd -p (từ cygwin hoặc xxd với vim7) bây giờ hãy gõ vào tệp đó và nó sẽ chỉ hiển thị nội dung của tệp, không phải là mã hex LE BOM 16 bit unicode, không phải là fffe khi bắt đầu Và xem cách nó hiển thị mã unicode BE BOM hexffff - không rõ ràng
barlop

1

Bực mình nhảy vào tâm trí của tôi ... nó là một công cụ rất tốt Và như Arjan đã chỉ ra, bạn đang lưu tệp dưới dạng tài liệu được mã hóa UTF-8.

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.