При конвертации между строками и байтами очень важно точно знать, какая кодировка используется, а также знать о возможностях разных кодировок.
Например, кодировка ASCII не может преобразовать в байты кириллицу.
Ошибка в регекспе с русскими символами Python: SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xd1.
Когда используются русские буквы не работает код. Пример:
average = int(re.findall(u'Среднее = (\d+)', out)[0])
Исключение: SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xd1 in position 0: invalid continuation byte
Типичная ошибка в Windows, потому что каталог пользователя по умолчанию C:\user\<your_user>
, поэтому, когда вы хотите использовать этот путь в качестве строкового параметра в функцию Python, вы получаете ошибку Unicode, просто потому, что \u
— это Unicode escape. Любой символ не числовой после этого выдает ошибку.
Чтобы решить эту проблему, просто удвоить обратную косую черту:C:\\user\\<\your_user>...
Префикс с ‘r’ работает очень хорошо, но он должен быть в правильном синтаксисе. Например:
passwordFile = open(r'''C:\Users\Bob\SecretPasswordFile.txt''')
Нет необходимости в\\[двойной обратной косой черты] здесь – поддерживает читаемость и работает хорошо.
Также вероятно, что SyntaxError
вызван тем что декларация кодировки файла (наверху самого файла) не соответствует фактической кодировке файла. Еще один вариант ошибки, когда используются разные кодировки для преобразований. Используйте редактор, который сохраняет файлы в utf-8.
Например, если сохранить текст в utf8-charset.py
файл:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
s = u"по-русски"
и запустить: python utf8-charset.py
, то ничего не произойдет (нет ошибки). Но если этот файл сохранить в другой (противоречащей декларации внутри файла) кодировке:
$ iconv -t 866 utf8-charset.py > wrong-866-charset.py
то при запуске той же команды: python wrong-866-charset.py
печатается ошибка.
Попробуй в начале файла написать:
# coding=windows-1251
Если проблема с кодировкой файла. Попробуйте сохранить файл в uft-8
.
- Файл
- Сохранить хххххх.py как
- У кнопки «Сохранить» надо открыть шторку
- Выбрать «Сохранить с кодировкой…»
- Соглашаемся на замену файла
- В шторке кодировки выбираем «Юникод (UTF-8, с сигнатурой), кодовая страница 65001»
- Жмем «Ок»
Готово
При переносе python файлов на хостовую машину через winscp внутри ломается кодировка на русских буквах, они все заменяютсь на другие символы. Можно перенести архивом и распаковать на хостовой машине — докер тогда запустится.