Emacs đang yêu cầu tôi cho một hệ thống mã hóa trên mỗi lần lưu


7

Tôi hợp nhất nhiều tệp văn bản (win, mac, unix) thành một tệp orgmode duy nhất. Đối với một số nhân vật tôi đã nhìn thấy những con số thay vì những nhân vật phù hợp. Những thứ như \ 314 \ 203.

Tôi đã sử dụng "Revert-buffer-with -oding-sytem" và chọn utf-8-hfs-unix. Điều đó sửa chữa nó.

Nhưng bây giờ mỗi khi tôi tiết kiệm, Emacs yêu cầu tôi chọn một hệ thống mã hóa. Nếu tôi chọn văn bản thô, nó sẽ ngừng hỏi nhưng khi tôi mở lại tệp thì các số sẽ quay trở lại.

Làm thế nào để tôi sửa lỗi này?


1
Làm thế nào về việc thêm -*- coding: utf-8-hfs-unix;-*-vào dòng đầu tiên của tập tin của bạn? ( gnu.org/software/emacs/manual/html_node/emacs/NH )
JeanPierre

Điều này một phần làm việc. Không có nhiều số. Vấn đề là khi tôi lưu Emacs hỏi tôi một lần nữa cho một hệ thống mã hóa. Chỉ khi tôi chọn văn bản thô, tôi có thể lưu mà không cần hỏi tôi mỗi lần.
Jason Mirk

2
Có thể là tập tin của bạn chứa các ký tự từ nhiều bộ ký tự không tương thích?
JeanPierre

Tôi nghĩ vậy nhưng làm thế nào để sửa nó?
Jason Mirk

1
Tôi đã gặp rắc rối trong vài ngày đầu sử dụng Emacs (một vài năm trước), nhưng tôi đã chấp nhận cách tiếp cận trong liên kết sau và chưa bao giờ nhìn lại - Làm cách nào để đặt lại emacs để lưu tệp trong mã hóa ký tự utf-8-unix? - stackoverflow.com/a/20736147/2112361 Nó tương tự như câu trả lời trước của elethen, nhưng có một số thứ mà tôi đã thêm vào vài năm trước. Tuy nhiên, vẫn còn một số ký tự đặc biệt kích hoạt một dấu nhắc. Vì rất hiếm khi tôi gặp phải những ký tự đó (thường là khi chỉnh sửa tệp sau khi nhận dạng ký tự quang học), tôi không bao giờ dành nhiều thời gian hơn cho vấn đề này.
luật

Câu trả lời:


6

Điều này đã xảy ra với tôi một thời gian trước khi tôi có ý tưởng về những gì đang diễn ra - đây là một ví dụ về cách điều này có thể xảy ra - (nếu nó quan trọng, tôi đang ở trên Windows, trong trường hợp đó là một cái gì đó cụ thể cho bản dựng này) -

Giả sử bạn có một tệp được mã hóa bằng UTF-8 và bạn dán một số văn bản từ một trang web được mã hóa bằng trang mã Latin-1 hoặc Windows-1252, ví dụ: O với một dấu ngoặc kép hoặc dấu ngoặc kép.

Bây giờ bạn có một chuỗi các ký tự được mã hóa UTF-8 theo sau là một cái gì đó không có ý nghĩa với UTF-8 hoặc có thể sẽ bị hiểu sai. Nếu nó không thể hiểu nó là một chuỗi UTF-8 chính xác, nó sẽ hiển thị nó dưới dạng giá trị thô, ví dụ: bát phân \ 326 (là một chữ O có âm sắc trong trang mã Latin-1). Điều này là do UTF-8, đặc biệt là \ 326 được theo sau bởi thứ gì đó có 10 ở hai bit cao nhất và nếu không, nó không biết phải làm gì với nó.

Ví dụ: nếu bạn đã truy cập https://www.gnu.org/software/emacs/manual/html_node/emacs/Intro.html#Intro và sao chép một số văn bản có trích dẫn xoăn, như "` G 'trong GNU " và dán nó vào bộ đệm được mã hóa UTF-8, bạn sẽ kết thúc với "The \ 221G \ 222 trong GNU".

Vậy lam gi?

Đối với một điều, bạn có thể nhìn vào bộ đệm với các hệ thống mã hóa khác nhau để xem liệu nó có hiển thị chính xác các ký tự đó không, ví dụ: Windows-1252 và Latin-1 khá phổ biến -

M-x revert-buffer-with-coding-system windows-1252 RET
M-x revert-buffer-with-coding-system latin-1 RET

Nếu tài liệu này trông tốt hơn theo cách này, bạn có thể lưu nó với mã hóa mới này. Có rất nhiều hệ thống mã hóa khác nhau mặc dù.

Để đưa nó trở lại UTF-8, chỉ cần làm

M-x revert-buffer-with-coding-system utf-8 RET

Về lý do tại sao điều này xảy ra, tôi không chắc chắn - có vẻ như Emacs sẽ biết làm thế nào một cái gì đó được mã hóa trong bảng tạm và dịch nó theo đó, nhưng dường như nó không làm điều này.

Để biết thêm giải thích, hãy xem /programming/1543613/how-does-utf-8-variable- thong-encoding-workhttp://kunststube.net/encoding/ .


1
Tôi đã mở nó bằng Visual Studio Code và nó đọc nó một cách hoàn hảo. Lưu, mở trong emacs. Bây giờ mọi thứ đều ổn
Jason Mirk

@JasonMirk Thú vị - có thể bạn đã đoán được hệ thống mã hóa nào sẽ được sử dụng cho bất kỳ ký tự lẻ nào, ví dụ Latin-1, và đã dịch chúng sang UTF-8?
Brian đốt cháy

Tôi nghĩ vậy. Đó là tất cả người đàn ông tốt. Saul Goodman.
Jason Mirk

Đây không phải là giải pháp, nhưng nó giúp ích với các bình luận của @JeanPierre. Ý tưởng là đọc tệp với mã hóa mong muốn (Alt + x Revert-buffer-with -oding-system) sau đó tìm kiếm các ký tự không phải ASCII để lọc các ký tự không hợp lệ (Mx search-Forward-regex [[: nonascii:]] RET).
emagar
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.