это мой первый вопрос здесь, и если его формат не соответствует ожидаемому, извините заранее.
У меня есть небольшая утилита, которая читает текстовые файлы ISO-8859-9 и выдает ее UTF-8копии.Метод, который я нашел, заключается в использовании методов кодирования и декодирования, когда я реализую путь старших, текстовые редакторы показывают символы юникода как нерелевантные символы.
Проблема в том, что файлы записаны правильно.Для проверки я создал вручную созданную версию этого файла в TextEdit на Mac.Шестнадцатеричный дамп конвертированной версии и md5sum одинаковы для созданного вручную.Тем не менее, и Textedit, и Kwrite (или Kate) в KDE показывают абсурдные символы, даже если я выберу UTF-8 в качестве входной кодировки.Почему это происходит и как я могу это решить?
Большое спасибо.
Обновление:
od -c выводится ниже:
Прежде всего, файл ISO-8859-9:
0000000 374 360 i 376 347 366 334 320 335 336 307 326 T e s t
0000020 T e s t
0000024
PythonСоздано UTF-8:
0000000 ü ** ğ ** i ş ** ç ** ö ** Ü ** Ğ ** İ
0000020 ** Ş ** Ç ** Ö ** T e s t T e s t
0000037
Ручное создание UTF-8:
0000000 ü ** ğ ** i ş ** ç ** ö ** Ü ** Ğ ** İ
0000020 ** Ş ** Ç ** Ö ** T e s t T e s t
0000037
Фактический код:
def convert_file(path_of_text_file):
try:
original_file = open(path_of_text_file, 'rb')
file_contents = unicode(original_file.read(), 'iso-8859-9')
original_file.close()
new_file = open("untitled2.txt", 'w+b')
new_file.write(file_contents.encode('utf8'))
new_file.close()
except IOError:
pass
Также да, файл ручной работы открывается простохорошо.Также он имеет тот же вывод md5sum и hex, что и генерируемый питоном.
od -xc выводит:
Снова исходный файл ISO-8859-9:
0000000 f0fc fe69 f6e7 d0dc dedd d6c7 6554 7473
374 360 i 376 347 366 334 320 335 336 307 326 T e s t
0000020 6554 7473
T e s t
0000024
Файл UTF-8, сгенерированный Python:
0000000 bcc3 9fc4 c569 c39f c3a7 c3b6 c49c c49e
ü ** ğ ** i ş ** ç ** ö ** Ü ** Ğ ** İ
0000020 c5b0 c39e c387 5496 7365 5474 7365 0074
** Ş ** Ç ** Ö ** T e s t T e s t
0000037
Файл UTF-8, созданный вручную:
0000000 bcc3 9fc4 c569 c39f c3a7 c3b6 c49c c49e
ü ** ğ ** i ş ** ç ** ö ** Ü ** Ğ ** İ
0000020 c5b0 c39e c387 5496 7365 5474 7365 0074
** Ş ** Ç ** Ö ** T e s t T e s t
0000037
Еще одно интересное замечание: BBEdit прекрасно обрабатывает созданные на Python файлы.