Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
5 / 2 / 0
Регистрация: 12.07.2014
Сообщений: 157
1

Почему в Python3 под Wndows нужно явно указывать кодировку?

11.08.2019, 19:02. Просмотров 1128. Ответов 4

Добрый день!
Как сделать, чтобы Python в Windows воспринимал по дефолту входящие файлы в UTF-8 ?

Есть текстовый файл в формате UTF-8, к нему идет обращение:
Python
1
2
3
4
filename = "text.txt"
with open(filename) as file_object:
    content = file_object.read()
    print(content)
В Linux код срабатывает, но если перенести скрипт и текстовый файл на винду, то вылазит ошибка:
Traceback (most recent call last):
File "10_1.py", line 6, in <module>
content = file_object.read()
File "C:\Users\sas\AppData\Local\Programs\Python\Python37-32\lib\encodings\cp1
251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 152: char
acter maps to <undefined>


------------------
(program exited with code: 1)

Для продолжения нажмите любую клавишу . . .
Приходится принудительно выставлять кодировку, чтобы код заработал:
Python
1
2
3
4
filename = "text.txt"
with open(filename, encoding = "utf-8" as file_object:
    content = file_object.read()
    print(content)
Как utf-8 сделать дефолтной кодировкой для Python, дабы принудительно не выставлять ее в скипте?
p.s.: сейчас по выводу ошибки видно, что Python ждет файлы в кодировке cp-1251
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2019, 19:02
Ответы с готовыми решениями:

Зачем нужно явно указывать тип переменной?
Всем привет! Объясните зачем нужно явно указывать тип переменной? Например в С++ это обязательно,...

При вынесении определения всегда ли нужно указывать функцию как inline явно?
Бьярни пишет class char_stack { int size; char* top; char* s; public: ...

Почему под данные структуры иногда явно выделяют память?
Видел коды, где под саму структуру и её данные явно выделяется память при помощи malloc которую так...

Почему в scanf нужно указывать именно адреса переменных?
Почему в функции scanf нужно указывать именно адреса переменных? Почему не работает, когда...

4
754 / 530 / 133
Регистрация: 22.02.2018
Сообщений: 1,640
11.08.2019, 19:58 2
sasha300, В питоне 3.Х кодировкой по умолчанию является utf-8. Если Ваши файлы имеют эту кодировку, то ничего указывать не надо. Если же Ваши файлы имеют другую кодировку, то их нужно декодировать, и питон переведет их в кодировку utf-8, с которой он работает по умолчанию.
1
130 / 145 / 19
Регистрация: 19.02.2017
Сообщений: 618
11.08.2019, 20:02 3
sasha300, потому что редакторы в Windows обычно кодируют по умолчанию в другой кодировке.
1
754 / 530 / 133
Регистрация: 22.02.2018
Сообщений: 1,640
11.08.2019, 20:03 4
Ваш первый пример показывает, что Ваш файл имеет кодировку отличную от utf-8
0
3365 / 2579 / 893
Регистрация: 28.10.2013
Сообщений: 6,781
11.08.2019, 20:59 5
Лучший ответ Сообщение было отмечено sasha300 как решение

Решение

Цитата Сообщение от sasha300 Посмотреть сообщение
В Linux код срабатывает, но если перенести скрипт и текстовый файл на винду, то вылазит ошибка
Потому что экстрасенсов нет и нужно всегда указывать кодировку файла. Даже на линукс, так как файл созданный не на линукс, но перенесенный туда - сам кодировку волшебным образом не поменяет. На линукс кодировка текстовых файлов по умолчанию utf-8, на windows - та, которая соответствует пользовательской локали, которая в свою очередь зависит от установленного языка интерфейса.

Цитата Сообщение от sasha300 Посмотреть сообщение
Python ждет файлы в кодировке cp-1251
Да, потому что у тебя русская windows и кодировка по умолчанию - windows-1251. И это (умолчания) нельзя изменить.
Python не имеет привычки угадывать - он берет умолчания из системы, если пользователь не позаботился указать настройки явно.

Добавлено через 3 минуты
Цитата Сообщение от sasha300 Посмотреть сообщение
Как utf-8 сделать дефолтной кодировкой для Python
Она и так является дефолтной. Но ты, видимо, не понимаешь что это относится только к файлам скриптов.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2019, 20:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как избавиться от необходимости явно указывать тип в enum?
Как сделать, чтобы для перечислений не нужно было явно указывать тип int? switch (direction) ...

Почему нужно указывать адрес отправителя почты, если он уже указан в JavaMailSender
конфигурационный файл @Configuration @PropertySource(value =...

Каковы три случая, когда надо явно указывать приведение примитивных типов в Java?
Моя наставница по Java после проверки того, насколько хорошо я усвоил материал, сказала, что у меня...

Обязательно ли указывать следующую кодировку?
Подскажите, обязательно ли указывать следующее описание на каждой странице сайта &lt;!DOCTYPE html...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.