Как правильно указать кодировку в Питон3?

Здравствуйте! Помогите, пожалуйста. Я еще совсем новичок в Питоне.
Нужно создать транслитератор с кириллицы на латиницу.
Однако я добавляю новые символы в алфавит, разные диакритические знаки. У меня возникает ошибка, связанная с кодировкой. Как ее исправить?

Traceback (most recent call last):
  File "C:\Users\Лариса\Desktop\Фото и документы\Математика и инфа\module.py", line 56, in <module>
    print(latinizator(line, legend), end='')
  File "C:\Users\Лариса\AppData\Local\Programs\Python\Python36-32\lib\encodings\cp1251.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\xed' in position 18: character maps to <undefined>


Вот мой код. Количество знаков сокращено, чтобы выглядело короче.
import os
import fileinput

def latinizator(letter, dic):
    for i, j in dic.items():
        letter = letter.replace(i, j)
    return letter

legend = {
    
'Ё':'Ö',
'Ж':'Ž',
'З':'Z',
'И':'I',
'Й':'Î',
'Ч':'Č',
'Ш':'Š',
'Щ':'Ś',
'Ъ':'V',
'Ы':'Y',
'Ь':'V',
'Э':'E',
'Ю':'Ü',
'Я':'Ä',

#Дополнительные знаки 
'ий':'í',
'ую':'ú',
'ой':'ó',
'ей':'é',
'ая':'á',
'ть':'ć',
}

with fileinput.FileInput('C:\\Users\\Лариса\\Desktop\\Фото и документы\\Математика и инфа\\alphabet.txt', inplace=True, backup='.bak') as f:
    for line in f:
        print(latinizator(line, legend), end='')
  • Вопрос задан
  • 650 просмотров
Решения вопроса 1
@be52
вроде все работает как задумано
оба файла в utf8 но файл с текстами можно в любой кодировке сделать и она указывается при открытии

import os 
import fileinput 

def latinizator(letter, dic): 
	for i, j in dic.items(): 
		letter = letter.replace(i, j) 
	return letter 

legend = { 

'Ё':'Ö', 
'Ж':'Ž', 
'З':'Z', 
'И':'I', 
'Й':'Î', 
'Ч':'Č', 
'Ш':'Š', 
'Щ':'Ś', 
'Ъ':'V', 
'Ы':'Y', 
'Ь':'V', 
'Э':'E', 
'Ю':'Ü', 
'Я':'Ä', 

#Дополнительные знаки 
'ий':'í', 
'ую':'ú', 
'ой':'ó', 
'ей':'é', 
'ая':'á', 
'ть':'ć', 
} 

with open('123.txt', 'r', encoding='utf8') as f: 
	for line in f: 
		print(latinizator(line, legend), end='')


123.txt
ЁЖ
паранойа

=========

ÖŽ
паранóа
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы