Tôi có nên sử dụng khai báo mã hóa trong Python 3 không?


114

Python 3 sử dụng mã hóa UTF-8 cho các tệp mã nguồn theo mặc định. Tôi vẫn nên sử dụng khai báo mã hóa ở đầu mỗi tệp nguồn? Giống# -*- coding: utf-8 -*-

Câu trả lời:


112

Bởi vì mặc định UTF-8, bạn chỉ cần sử dụng khai báo đó khi bạn đi chệch khỏi mặc định hoặc nếu bạn dựa vào các công cụ khác (như IDE hoặc trình soạn thảo văn bản của bạn) để sử dụng thông tin đó.

Nói cách khác, đối với Python , chỉ khi bạn muốn sử dụng một bảng mã khác, bạn mới phải sử dụng khai báo đó.

Các công cụ khác, chẳng hạn như trình soạn thảo của bạn, có thể hỗ trợ cú pháp tương tự, đó là lý do tại sao thông số kỹ thuật PEP 263 cho phép sự linh hoạt đáng kể trong cú pháp (nó phải là chú thích, văn bản codingphải ở đó, theo sau là một :hoặc =ký tự và khoảng trắng tùy chọn, theo sau là codec được công nhận).

Lưu ý rằng nó chỉ áp dụng cho cách Python đọc mã nguồn . Nó không áp dụng cho việc thực thi mã đó, vì vậy không áp dụng cho cách in, mở tệp hoặc bất kỳ hoạt động I / O nào khác dịch giữa byte và Unicode. Để biết thêm chi tiết về Python, Unicode và các bảng mã, tôi thực sự khuyên bạn nên đọc Python Unicode HOWTO , hoặc bài nói chuyện rất kỹ lưỡng về Pragmatic Unicode của Ned Batchelder.


28
Các # -*- coding: utf-8 -*-vẫn có thể hữu ích đối với một số biên tập viên để chuyển sang dự kiến mã hóa khi chỉnh sửa các tập tin nguồn.
pepr

1
@pepr Một Dấu đơn hàng Byte có thể làm tương tự, phải không?
endolith

12
@endolith: UTF-8 BOM là một điều ghê tởm trên trái đất này do Microsoft đưa ra .. Xem en.wikipedia.org/wiki/Byte_order_mark#UTF-8
Martijn Pieters

1
@MartijnPieters Liên kết của bạn dường như không đồng ý với bạn
endolith

2
@endolith: không, bài viết trên WP chỉ tóm tắt lai lịch thôi, theo ý kiến ​​cá nhân mình thấy nó ghê tởm. Điểm của BOM là ghi lại thứ tự byte (do đó có tên là Byte Order Mark). Không có sự nhầm lẫn thứ tự byte trong UTF-8, nó chỉ có chức năng đó trong UTF-16 và UTF-32. Giá trị đã là một ký tự khoảng trắng không ngắt, có chiều rộng bằng 0 được định hướng lại (tiện dụng, vì việc in ngẫu nhiên sau đó kết thúc với đầu ra hoàn toàn vô hình), theo quan điểm của tôi, việc sử dụng lại nó để làm hằng số ma thuật là sai.
Martijn Pieters

6

Không, nếu:

  • toàn bộ dự án chỉ sử dụng UTF-8, là mặc định.
  • và bạn chắc chắn rằng công cụ IDE của bạn không cần khai báo mã hóa đó trong mỗi tệp.

Có, nếu

  • dự án của bạn dựa trên mã hóa khác nhau
  • hoặc dựa vào nhiều bảng mã.

Đối với các dự án đa mã hóa:

Nếu một số tệp được mã hóa trong non-utf-8, thì ngay cả đối với những tệp được mã hóa này , UTF-8bạn cũng nên thêm khai báo mã hóa, bởi vì quy tắc vàng làExplicit is better than implicit.

Tài liệu tham khảo:

  • PyCharm không cần khai báo đó:

định cấu hình mã hóa cho tệp cụ thể trong pycharm

  • vim không cần khai báo đó, nhưng:
# vim: set fileencoding=<encoding name> :
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.