Считывание txt в кодировке utf-8

ilyasoloma

Возникла проблема при считывании текстовых файлов в кодировке utf-8. Вернее, считывать-то считывает, однако почему-то дальше программа отрабатывает неправильно, хотя при консольном вводе/выводе всё прекрасно:
# -*- coding: utf-8 -*-
import codecs
s = codecs.open('input.txt','r', encoding='utf-8').read().split()
m = s[0].upper()
l = s[1].upper()
print(m + ' ' + l)
if (m == l):
    print(1)
else:
    print(0)
Программа считывает 2 слова и сравнивает их, если они независимо от регистра одинаковы, то выводит 1, иначе 0. Сейчас же всегда выводит 0. Python 3
10 ответов

ilyasoloma

ilyasoloma,
with open('input.txt') as fin:
    a, b = [line.strip().upper() for line in fin]
print(1 if a == b else 0)
При условии, что каждое слово записано на отдельной строке


ilyasoloma

ilyasoloma, С кодом все в порядке, только он больше для python 2, нежели чем для python 3.
s = open('input.txt', encoding='utf-8').read().split()
m = s[0].upper()
l = s[1].upper()
print(m + ' : ' + l)
if m == l:
    print(1)
else:
    print(0)
Текстовый файл скинь


ilyasoloma

Вот


ilyasoloma

Чем он python 2 напоминает?Не работает


ilyasoloma

ilyasoloma, Пересохраните ваш файл в кодировке utf-8


ilyasoloma

ilyasoloma, твой файл в кодировке utf8 with bom, а тебе надо просто utf8. Если используешь notepad++, то при сохранении выбирай utf8 без bom и будет тебе счастье.


ilyasoloma

Ennjin, он и есть в utf-8


ilyasoloma

ilyasoloma, прочитай комент alex925


ilyasoloma

Для файлов в UTF-8 with BOM в python есть отдельное наименование кодировки: encoding='utf_8_sig'. Если указывать ее - сигнатура BOM \ufeff не будет учитываться при чтении текста из файла в этой кодировке и сравнения строк будут работать корректно.


ilyasoloma

Но лучшее не использовать эту кодировку, она не популярна мягко говоря, а ut8 without bom это практически стандарт во многих местах.