Trường hợp này đến từ đâu: - * - mã hóa: utf-8 - * -


135

Python nhận ra sau đây là hướng dẫn xác định mã hóa của tệp:

# -*- coding: utf-8 -*-

Tôi chắc chắn đã thấy loại hướng dẫn này trước ( -*- var: value -*-). Nó đến từ đâu? Thông số kỹ thuật đầy đủ là gì, ví dụ giá trị có thể bao gồm khoảng trắng, ký hiệu đặc biệt, dòng mới, thậm chí -*-chính nó?

Chương trình của tôi sẽ viết các tệp văn bản đơn giản và tôi muốn đưa một số siêu dữ liệu vào chúng bằng định dạng này.


3
Điều này dễ nhớ hơn và hoạt động trong trình soạn thảo của tôi, PyCharm. # coding: utf-8
crizCraig

2
Sử dụng # coding: utf8các công việc vượt trội với Python 2.7, thậm chí bên ngoài PyCharm. (Tôi sử dụng SublimeText).
Basj


1
@Cbhihe Câu hỏi này không phải về Python, không phải về những gì hướng dẫn làm hoặc cách thức hoạt động. Nó đang hỏi phần mềm tiền Python nào đã phát minh ra nó và nếu có nhiều thứ hơn là chỉ mã hóa tập tin.
hamstergene

Câu trả lời:


89

Cách xác định mã hóa tệp Python này xuất phát từ PEP 0263 - Xác định mã hóa mã nguồn Python .

Nó cũng được GNU Emacs nhận ra (xem Tài liệu tham khảo ngôn ngữ Python, 2.1.4 Khai báo mã hóa ), mặc dù tôi không biết liệu đây có phải là chương trình đầu tiên sử dụng cú pháp đó không.


4
Từ những gì tôi có thể kết luận từ hướng dẫn sử dụng Emacs, giá trị có thể là bất kỳ biểu thức LISP nào, đặc biệt, một chuỗi trích dẫn kép
hamstergene 2/211

Cảm ơn các liên kết pep. Trước đây tôi có ấn tượng rằng lệnh này chỉ được sử dụng bởi trình soạn thảo văn bản. Cho đến bây giờ, tôi không bao giờ biết rằng trình thông dịch python thực sự phân tích cú pháp nhận xét nếu nó có mặt trên hai dòng đầu tiên của tệp.
umeboshi

13

# -*- coding: utf-8 -*-là một điều Python 2. Trong Python 3+, mã hóa mặc định của các tệp nguồn đã là UTF-8 và dòng đó là vô dụng.

Xem: Tôi có nên tuyên bố sử dụng mã hóa bằng Python 3?

pyupgradelà một công cụ bạn có thể chạy trên mã của mình để xóa các nhận xét đó và các phần còn lại không còn hữu ích khác khỏi Python 2, giống như tất cả các lớp của bạn được kế thừa từ đó object.


8

Điều này được gọi là các biến cục bộ của tệp, được hiểu bởi Emacs và được đặt tương ứng. Xem phần tương ứng trong hướng dẫn sử dụng Emacs - bạn có thể xác định chúng trong tiêu đề hoặc chân trang của tệp


Kiểu biến cục bộ tệp cụ thể này cũng được hiểu bởi chính trình thông dịch Python, nó không chỉ dành cho các trình soạn thảo văn bản. stackoverflow.com/questions/41680533/ Lời
Boris

4

Trong PyCharm, tôi sẽ bỏ nó. Nó tắt chỉ báo UTF-8 ở phía dưới với cảnh báo rằng mã hóa được mã hóa cứng. Đừng nghĩ rằng bạn cần bình luận PyCharm đã đề cập ở trên.


thực tế, nếu tôi đặt một dòng như test1 = 'äöü'nó sẽ gợi ý bạn thêm một cái mũ như vậy vào tập tin. (pycharm 2019.1)
Mắt Cutton

@Cutton Eye có phải là với Python 2 hay 3 không?
Boris
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.