PEP 263 mendefinisikan cara mendeklarasikan pengkodean kode sumber Python.
Biasanya, 2 baris pertama file Python harus dimulai dengan:
#!/usr/bin/python
# -*- coding: <encoding name> -*-
Tetapi saya telah melihat banyak file dimulai dengan:
#!/usr/bin/python
# -*- encoding: <encoding name> -*-
=> encoding daripada coding .
Jadi apa cara yang benar untuk mendeklarasikan penyandian file?
Apakah penyandian diizinkan karena regex yang digunakan malas? Atau itu hanya bentuk lain dari mendeklarasikan penyandian file?
Saya mengajukan pertanyaan ini karena PEP tidak berbicara tentang pengkodean , itu hanya berbicara tentang pengkodean .
#!/usr/bin/env python
bukannya#!/usr/bin/python
ascii
menjadiUTF-8
. Bandingkan: python 2.7 docs dengan python 3.7 docs . Ini berarti Anda dapat dengan aman menghilangkan pengkodean ini jika Anda ingin menentukanUTF-8
.Jawaban:
Periksa dokumen di sini :
"Jika komentar di baris pertama atau kedua skrip Python cocok dengan ekspresi reguler
coding[=:]\s*([-\w.]+)
, komentar ini diproses sebagai deklarasi penyandian""Bentuk yang disarankan dari ungkapan ini adalah
yang diakui juga oleh GNU Emacs, dan
yang diakui oleh VIM Bram Moolenaar. "
Jadi, Anda bisa meletakkan apa saja sebelum bagian "coding", tetapi tetaplah pada "coding" (tanpa awalan) jika Anda ingin 100% python-docs-recommendation-compatible.
Lebih khusus lagi, Anda perlu menggunakan apa pun yang dikenali oleh Python dan perangkat lunak pengeditan khusus yang Anda gunakan (jika perlu / menerima apa saja). Misalnya
coding
formulir dikenali (di luar kotak) oleh GNU Emacs tetapi bukan Vim (ya, tanpa perjanjian universal, itu pada dasarnya perang wilayah ).sumber
-*-
?-*-
memastikan bahwa baris dikenali oleh GNU Emacs (editor teks populer dengan beberapa programmer). Perhatikan bahwa, bertentangan dengan jawaban ini, baik formulir Emacs dan formulir Vim 100% kompatibel dengan python-docs-rekomendasi (karena keduanya cocok dengan regexp - "kecocokan", dengan konvensi lama, berarti "kecocokan di mana saja di string ", bertentangan dengan API Python).<prefix>-*- var: value[; ...] -*-
.PEP 263:
Jadi, "en coding: UTF-8 " cocok.
PEP memberikan beberapa contoh:
sumber
Cukup salin tempel pernyataan di bawah ini di bagian atas program Anda. Ini akan menyelesaikan masalah pengkodean karakter
sumber
Mulai hari ini - Juni 2018
PEP 263 sendiri menyebutkan regex yang mengikuti:
Jadi, seperti yang telah dirangkum dengan jawaban lain, itu akan cocok
coding
dengan awalan apa pun, tetapi jika Anda ingin menjadi sesuai dengan PEP karena mendapat (meskipun, sejauh yang saya tahu, menggunakanencoding
bukannyacoding
tidak melanggar PEP 263 dengan cara apa pun) - tetap dengan 'polos'coding
, tanpa awalan.sumber
Jika saya tidak salah, proposal asli untuk penyandian file sumber adalah menggunakan ekspresi reguler untuk beberapa baris pertama, yang akan memungkinkan keduanya.
Saya pikir regex adalah sesuatu yang
coding:
diikuti oleh sesuatu.Saya menemukan ini: http://www.python.org/dev/peps/pep-0263/ Yang merupakan proposal asli, tetapi sepertinya saya tidak dapat menemukan spek akhir yang menyatakan dengan tepat apa yang mereka lakukan.
Saya sudah terbiasa
encoding:
dengan efek yang hebat, jadi jelas itu berhasil.Coba ubah ke sesuatu yang sama sekali berbeda, ingin
duhcoding: ...
melihat apakah itu berfungsi dengan baik.sumber
Saya menduga itu mirip dengan Ruby - metode mana pun tidak apa-apa.
Ini sebagian besar karena editor teks yang berbeda menggunakan metode yang berbeda (yaitu, dua) pengkodean penandaan.
Dengan Ruby, selama yang pertama, atau kedua jika ada garis shebang berisi string yang cocok:
dan mengabaikan spasi putih dan bulu-bulu lain di jalur itu. (Ini sering bisa menjadi = bukannya:, juga).
sumber