Задать вопрос
@SOmar

Перенос с python 2 в python 3?

Правильный вариант.
Есть файл в кодировке cp866. В Python 2 при считывании строки и передачи её по буквенно в ord() получаю следующее.
Python 2
files = open('vesy.txt', 'r')
[131, 224, 227, 164, 170, 160, 32, 150, 129, 32, 145, 168, 226, 173, 174, 32, 225, 47, 172, 32, 170, 163, 44, 44]

При этом файл открывается в encoding = None.

Неправильно.
При попытке же открыть тот же файл в Python 3 мне выдает вот такой бред.
Python 3
не передаю encoding по умолчанию ставиться utf8
files = open('vesy.txt', 'r')
передаю encoding = None по умолчанию ставиться utf8
files = open('vesy.txt', 'r', encoding=None)

ОШИБКА
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 20: invalid start byte

При передачи же encoding cp866 и cp1251 получаю не то что надо.
Python 3
files = open('vesy.txt', 'r', encoding='cp866')
[1043, 1088, 1091, 1076, 1082, 1072, 32, 1062, 1041, 32, 1057, 1080, 1090, 1085, 1086, 32, 1089, 47, 1084, 32, 1082, 1075, 44, 44]
files = open('vesy.txt', 'r', encoding='cp1251')
[1107, 1072, 1075, 164, 1028, 160, 32, 8211, 1027, 32, 8216, 1025, 1074, 173, 174, 32, 1073, 47, 172, 32, 1028, 1032, 44, 44]
  • Вопрос задан
  • 430 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Комментировать
@SOmar Автор вопроса
Нет это не то, по крайне мере у меня не работает.

Кодировка CP866. Русская большая буква "А" интерпретируется там кодом 128.
Я же на деле получаю код 1040 что соответствует кодировке utf8.

Вот этот код:
print(ord("А"))
в Windows выдает 128
в Linux выдает 1040

# -*- coding: cp866 -*-
в начале файла не помогает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы