2016-05-28 4 views
-1

Я пытаюсь написать приложение Python для преобразования старых текстовых файлов кодовой страницы DOS в их эквивалент Unicode. Теперь я сделал это, прежде чем использовать Turbo Pascal, создав таблицу поиска, и я уверен, что то же самое можно сделать с помощью словаря Python. Мой вопрос: Как индексировать в словаре, чтобы найти символ, который я хочу преобразовать и отправить эквивалентный Unicode в выходной файл Unicode?Преобразование текстовых файлов DOS в Юникод с использованием Python

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

+1

На самом деле, вы не отправляли вопрос. У вас возникла проблема. Так что больше о ответах на вопросы. Чтобы получить ответ, я предлагаю попробовать что-то, и если это не сработает, напишите свой код и попросите совета. – RobertB

+0

Вы действительно хотите посмотреть сами? Python имеет множество встроенных кодировок: https://docs.python.org/3/library/codecs.html#standard-encodings – MaxNoe

ответ

0

Вы можете использовать стандартный метод Buildin decode из bytes объектов:

with open('dos.txt', 'r', encoding='cp437') as infile, \ 
     open('unicode.txt', 'w', encoding='utf8') as outfile: 
    for line in infile: 
     outfile.write(line) 
+0

В Python 2 по умолчанию для 'unicode.txt' будет' ascii' и в Python 3 это будет 'locale.getpreferredencoding()' (в US Windows, 'cp1252'). Таким образом, это не сработает, если вы не используете Python 3 и ОС, которые по умолчанию используют UTF-8. Ни один из них не поддерживает полный диапазон символов cp437. –

1

Python имеет кодеки делать преобразование:

#!python3 

# Test file with bytes 0-255. 
with open('dos.txt','wb') as f: 
    f.write(bytes(range(256))) 

# Read the file and decode using code page 437 (DOS OEM-US). 
# Write the file as UTF-8 encoding ("Unicode" is not an encoding) 
# UTF-8, UTF-16, UTF-32 are encodings that support all Unicode codepoints. 

with open('dos.txt',encoding='cp437') as infile: 
    with open('unicode.txt','w',encoding='utf8') as outfile: 
     outfile.write(infile.read())