cp1252
- кодировка по умолчанию для вашего терминала. Старые версии Python автоматически кодируют строки Unicode в кодировку терминала по умолчанию. Вам не нужно явно кодировать / декодировать, но вам нужно использовать терминал / IDE, который поддерживает кодировку, необходимую для используемых символов. UTF-8 является обычным выбором, поскольку он может обрабатывать все символы Unicode.
В Windows версии Python 3.6 и выше лучше обрабатывают Unicode. Кодировка терминала игнорируется, и API консоли Windows Unicode используются для прямой записи в окно терминала. Вам понадобится терминальный шрифт, который поддерживает язык, чтобы видеть символы, или использовать IDE, которая поддерживает UTF-8:
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> b = "କାହିଁକି ଏଇଠି ଅଛୁ "
>>> print(b)
କାହିଁକି ଏଇଠି ଅଛୁ
Для записи в файл кодировкой по умолчанию является значение, возвращаемое locale.getpreferredencoding(False)
, которое в вашей системе будет cp1252
. Вместо этого укажите кодировку. UTF-8 работает для всех кодовых точек Unicode. Для Python 3 используйте следующее:
with open('out.txt','w',encoding='utf8') as f:
f.write("କାହିଁକି ଏଇଠି ଅଛୁ ")
Используйте io.open
в Python 2, который совместим с тем же синтаксисом.
Всегда указывайте кодировку при чтении или записи файла, чтобы коду не приходилось полагаться на значение по умолчанию, которое может меняться в разных локализованных версиях ОС.
Многие приложения Windows используют кодировку по умолчанию при чтении файла вместо UTF-8, поэтому вы можете использовать 'utf-8-sig'
в качестве кодировки для записи подписи в начале файла, который приложения Windows (например, Excel) вместо этого распознает и использует UTF-8.