Olej писал(а): ↑09 дек 2022, 03:22
Все новые языки декларируют, что в них всё представляется в кодировке UTF-8.
Python ...
В Python версии 2, бывшим превалирующим (в Linux) на протяжении около 20 лет не было соглашений о дефаултной локали в коде:
Код: Выделить всё
$ python2
Python 2.7.18 (default, Jul 1 2022, 12:27:04)
[GCC 9.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getlocale()
(None, None)
Для указания использования кодировки UTF-8 требовалось явное указание этого (2-я строка):
Код: Выделить всё
$ cat l2.1.py
#!/usr/bin/python2
# -*- coding: utf-8 -*-
print("русскоязычная строка")
$ ./l2.1.py
русскоязычная строка
Но стоит вам убрать эту строку спецкомментария, и интерпретатор теряется и не знает что делать с такой Unicode строкой:
Код: Выделить всё
$ cat l2.2.py
#!/usr/bin/python2
print("русскоязычная строка")
$ ./l2.2.py
File "./l2.2.py", line 2
SyntaxError: Non-ASCII character '\xd1' in file ./l2.2.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
Но по стандарту Python версии 3 (начавшим распространение с 2008 года и с 2022 года ставшим, наконец, стандартом по умолчанию для основных дистрибутивов Linux - см.
Python: версии языка) регламентируется что всё в коде представляется в кодировке UTF-8. Сравните:
Код: Выделить всё
$ python3
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getlocale()
('ru_UA', 'UTF-8')
И теперь для мультиязычных приложений нет сложностей в этом смысле, и не нужны никакие дополнительные явные указания:
Код: Выделить всё
$ cat l3.1.py
#!/usr/bin/python3
print("русскоязычная строка")
print("Hello, 世界")
$ ./l3.1.py
русскоязычная строка
Hello, 世界
Более того, и в самом коде (который также представляется в UTF-8) могут использоваться мультиязычные символы, например в именах переменных для большей ясности их значений:
Код: Выделить всё
$ python3
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> длина = 123
>>> print(длина)
123