Skąd się to bierze: - * - kodowanie: utf-8 - * -


135

Python rozpoznaje następującą instrukcję, która definiuje kodowanie pliku:

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

Zdecydowanie widziałem tego rodzaju instrukcje wcześniej ( -*- var: value -*-). Skąd to pochodzi? Jaka jest pełna specyfikacja, np. Czy wartość może zawierać spacje, symbole specjalne, znaki nowej linii, a nawet -*-samą siebie?

Mój program będzie zapisywał zwykłe pliki tekstowe i chciałbym dołączyć do nich metadane przy użyciu tego formatu.


3
Jest to łatwiejsze do zapamiętania i działa w moim edytorze PyCharm. # coding: utf-8
crizCraig

2
Używanie # coding: utf8działa po wyjęciu z pudełka w Pythonie 2.7, nawet poza PyCharm. (Używam SublimeText).
Basj


1
@Cbhihe To pytanie nie dotyczy Pythona, nie dotyczy tego, co robi instrukcja ani jak działa. Pyta, które oprogramowanie pre-Python go wymyśliło i czy chodzi o coś więcej niż tylko kodowanie plików.
hamstergene

Odpowiedzi:


89

Ten sposób określania kodowania pliku w języku Python pochodzi z dokumentu PEP 0263 - Definiowanie kodowania kodu źródłowego w języku Python .

Jest również rozpoznawany przez GNU Emacs (patrz Python Language Reference, 2.1.4 Encoding Declarations ), chociaż nie wiem, czy był to pierwszy program, który używał tej składni.


4
Z tego co mogę wywnioskować z podręcznika Emacs, wartość może być dowolne wyrażenie LISP, szczególnie, podwójnie cudzysłowie
hamstergene

Dzięki za link zachęcający. Wcześniej miałem wrażenie, że z dyrektywy korzystał tylko redaktor tekstu. Do tej pory nigdy nie wiedziałem, że interpreter Pythona faktycznie przeanalizował komentarz, jeśli znajduje się on w pierwszych dwóch wierszach pliku.
umeboshi



4

W PyCharm opuściłbym to. Wyłącza wskaźnik UTF-8 na dole z ostrzeżeniem, że kodowanie jest zakodowane na stałe. Nie myśl, że potrzebujesz wspomnianego powyżej komentarza PyCharm.


właściwie, jeśli wstawię taką linię, test1 = 'äöü'to podpowie ci, aby dodać taki nagłówek do pliku. (pycharm 2019.1)
Cutton Eye

@Cutton Eye czy tak jest z Pythonem 2 czy 3?
Boris
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.