Когда использовать utf8 в качестве заголовка в файлах py
Некоторые исходные файлы из загруженного кода имеют следующий заголовок
# -*- coding: utf-8 -*-
У меня есть идея, что такое кодировка utf-8, но зачем она нужна в качестве заголовка в исходном файле python?
Ответы
Ответ 1
где вам нужно использовать в своих кодах символы, которые не относятся к ascii, например:
ă
интерпретатор будет жаловаться, что он не понимает, что char.
Обычно это происходит, когда вы определяете константы.
Пример:
Добавить в x.py
print 'ă'
затем запустите консоль python
import x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "x.py", line 1
SyntaxError: Non-ASCII character '\xc4' in file x.py on line 1,
but no encoding declared;
see http://www.python.org/peps/pep-0263.html for details
Ответ 2
Всегда используйте UTF-8 и убедитесь, что ваш редактор также использует UTF-8.
Начните свой Python script следующим образом, если вы используете Python 27:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
Это хорошая запись в блоге от Nick Johnson о Python и UTF-8:
http://blog.notdot.net/2010/07/Getting-unicode-right-in-Python
Кстати, этот пост был написан до того, как он мог использовать:
from __future__ import unicode_literals
Ответ 3
При использовании символов, отличных от ascii. Например, когда я комментирую свой источник в норвежском, если charachters ØÆÅ встречаются в .py, он будет жаловаться, а не "компилировать".
Ответ 4
Всякий раз, когда текст читается или записывается, кодировки вступают в игру. Всегда. Интерпретатор python должен прочитать ваш файл как текст, чтобы понять его. Единственная ситуация, когда вы можете уйти, не имея дело с кодировками, - это когда вы используете только символы в диапазоне ASCII. Интерпретатор может в этом случае использовать практически любую кодировку в мире и получить ее правильно, потому что почти все кодировки кодируют эти символы в одни и те же байты.
Вы не должны использовать coding: utf-8
только потому, что в вашем файле есть символы за пределами ascii, это может быть даже вредно. Это подсказка для интерпретатора python, чтобы сказать, в какой кодировке находится ваш файл. Если вы не настроили текстовый редактор, текстовый редактор, скорее всего, не сохранит ваши файлы в utf-8. Итак, теперь подсказка, которую вы дали интерпретатору python, неверна.
Поэтому вы должны использовать его, когда ваш файл закодирован в utf-8. Если он закодирован в windows-1252, вы должны использовать coding: windows-1252
и т.д.
Ответ 5
Более прямой ответ:
В Python 3+: вам не нужно объявлять. UTF-8 используется по умолчанию. Убедитесь, что файл закодирован в UTF-8. Некоторые редакторы Windows не имеют его по умолчанию. Это не повредит объявить это, и некоторые редакторы могут использовать это.
В Python 2: всегда. По умолчанию зависит от ОС.
И помните: это только ваши файлы исходного кода. Сейчас в третьем тысячелетии строковый тип больше не существует. Вы должны позаботиться о типе текста, который представляет собой последовательность байтов и кодировку. Вам все равно придется определять кодировку во всех операциях ввода и вывода. Эти операции по-прежнему будут зависеть от вашей среды, поэтому все же лучше следовать правилу: явное лучше, чем неявное.