Dari mana asalnya: - * - coding: utf-8 - * -

135

Python mengenali berikut ini sebagai instruksi yang mendefinisikan penyandian file:

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

Saya pasti melihat instruksi semacam ini sebelumnya ( -*- var: value -*-). Dari mana asalnya? Apa spesifikasi lengkapnya, mis. Bisakah nilainya mencakup spasi, simbol khusus, baris baru, bahkan -*-sendiri?

Program saya akan menulis file teks biasa dan saya ingin memasukkan beberapa metadata di dalamnya menggunakan format ini.

hamstergene
sumber
3
Ini lebih mudah diingat dan berfungsi di editor saya, PyCharm. # coding: utf-8
crizCraig
2
Menggunakan # coding: utf8karya di luar kotak dengan Python 2.7, bahkan di luar PyCharm. (Saya menggunakan SublimeText).
Basj
1
@ Cbhihe Pertanyaan ini bukan tentang Python, bukan tentang apa yang instruksi lakukan atau bagaimana cara kerjanya. Ia menanyakan perangkat lunak pra-Python yang menemukan itu dan jika ada lebih dari itu hanya penyandian file.
hamstergene

Jawaban:

89

Cara menentukan pengkodean file Python ini berasal dari PEP 0263 - Menentukan Penyandi Kode Sumber Python .

Itu juga dikenali oleh GNU Emacs (lihat Python Language Reference, 2.1.4 Pengkodean deklarasi ), meskipun saya tidak tahu apakah itu adalah program pertama yang menggunakan sintaks itu.

Andrea Spadaccini
sumber
4
Dari apa yang saya dapat simpulkan dari manual Emacs, nilai dapat berupa ekspresi LISP, khususnya, string yang dikutip ganda
hamstergene
Terima kasih untuk tautannya. Saya sebelumnya mendapat kesan bahwa arahan hanya digunakan oleh editor teks. Sampai sekarang, saya tidak pernah tahu bahwa interpreter python sebenarnya mengurai komentar jika ada pada dua baris pertama file.
umeboshi
4

Di PyCharm, saya akan meninggalkannya. Ini mematikan indikator UTF-8 di bagian bawah dengan peringatan bahwa pengkodean adalah hard-coded. Jangan berpikir Anda membutuhkan komentar PyCharm yang disebutkan di atas.

cwp393
sumber
sebenarnya, jika saya meletakkan garis seperti test1 = 'äöü'itu akan mengisyaratkan Anda untuk menambahkan header seperti itu ke file. (pycharm 2019.1)
Cutton Eye
@Cutton Eye apakah itu dengan Python 2 atau 3?
Boris