2012-08-31 36 views
11

Tôi không muốn giải thích dữ liệu của mình theo bất kỳ cách mã hóa cụ thể nào. Nói cách khác, khi tôi đang trong vim, tôi muốn nhân vật mà con trỏ của tôi là tương ứng với thực tế byte, không phải là một utf * (vv) đại diện của byte đó.Cách lấy vim để hiển thị biểu diễn từng byte của dữ liệu tệp

Tôi cần sử dụng vim để phân tích các vấn đề gây ra bởi lỗi chuyển đổi Unicode do người khác thực hiện (sử dụng phần mềm khác) vì vậy điều quan trọng là tôi thấy những gì thực sự ở đó.

Ví dụ, trong vim Cygwin, tôi đã có thể nhìn thấy UTF-8 BOMs như

ï »¿[BẮT ĐẦU FILE DỮ LIỆU]

này là hoàn hảo. Tôi nhận ra điều này là một UTF-8 BOM và nếu tôi muốn biết hex của mỗi ký tự là gì, tôi có thể đặt con trỏ lên các ký tự và sử dụng 'ga'.

Gần đây tôi đã có một máy Linux thích hợp (Fedora). Trong/etc/vimrc, dòng này tồn tại

bộ fileencodings = UCS-bom, utf-8, latin1

Khi tôi nhìn vào một BOM UTF-8 trên máy tính này, HÐQT là hoàn toàn ẩn.

Khi tôi thêm dòng sau vào ~/vimrc

bộ fileencodings = latin1

tôi thấy

AA »Â¿

3 ký tự đầu tiên là BOM (khi ga được sử dụng để chống lại chúng). Tôi không biết 3 ký tự cuối cùng là gì.

Tại một thời điểm, tôi thậm chí còn thấy UTF-8 BOM được biểu thị là "feff" - bảng UTF-16.

Dù sao, bạn thấy vấn đề của tôi. Tôi cần phải xem chính xác những gì có trong tập tin của tôi mà không có vim giải thích các byte cho tôi. Tôi biết tôi có thể sử dụng xxd, od, vv nhưng vim luôn luôn rất thuận tiện như một công cụ phân tích. Plus Tôi muốn có thể chỉnh sửa các tập tin và lưu chúng mà không có bất kỳ vấn đề chuyển đổi.

Cảm ơn sự giúp đỡ của bạn.

+4

Tâm trí bạn: bất cứ khi nào ai đó viết, nói hoặc thậm chí nghĩ "UTF-8 BOM", một con mèo bị giết. – zzzz

Trả lời

14

Sử dụng 'binary' chế độ:

:edit ++bin file 

hoặc

vim -b file 

Từ :help 'binary':

Các 'fileencoding' và các tùy chọn 'fileencodings' sẽ không được sử dụng, các tập tin là đọc mà không cần chuyển đổi.

+0

Cảm ơn. Đó là một gợi ý rất hợp lý nhưng tôi nhận được kết quả tương tự. –

5

Trình tự  thực sự là U + FEFF (BOM) được mã hóa UTF-8, mã hóa latin1, mã hóa UTF-8 và giải mã latin1 một lần nữa.  là U + FEFF (BOM) được mã hóa dưới dạng UTF-8 và được giải mã là latin1. Bạn không thể thoát khỏi mã hóa. Đó không phải là byte thực tế, chúng là các ký tự latin1 được hiển thị từ giải mã không chính xác. Nếu bạn muốn byte, sử dụng một trình soạn thảo hex; nếu không, hãy sử dụng giải mã đúng.

5

Tôi nhận được số dặm tốt khi thực hiện :e ++enc=latin1 sau khi tải tệp (dự đoán ban đầu của VIm về mã hóa không quan trọng ở giai đoạn này).

+0

điều này hữu ích – Tommy

Các vấn đề liên quan