Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Алекс получил от своего друга Никиты из России электронное письмо
- с вложенным текстовым файлом (не маленьким – точно больше 100Кб)
- и был удивлен его содержимым. Алекс давно знаком с Никитой и знает,
- что текст точно на русском языке, что он все пишет в нижнем регистре,
- и что Никита принципиально не использует никакие кодировки,
- кроме однобайтовых.
- Алекс хотел бы определить, какую кодировку Никита использовал
- (CP866 (DOS), CP1251 (Windows), KOI8R, ISO-8859-5, cp10007(MacOS)),
- и увидеть первые 2048 символов этого файла в кодировке UTF-8.
- Воспользуйтесь имеющимися данными, напишите программу, которая будет
- определять автоматически определять кодировку
- и выводить первые 2048 символов этого файла в кодировке UTF-8.
- """
- """
- 'cp866' а-п = 0xA0 - 0xAF, р-я = 0xE0 - 0xEF, ё = 0xF1
- 'koi8-r' а-я = 0xC0 - 0xDF, ё = 0xA3
- 'iso8859_5' а-я = 0xD0 - 0xEF, ё = 0xF1
- 'cp1251' а-я = 0xE0 - 0xFF, ё = 0xB8
- 'mac_cyrillic' а-ю = 0xE0 - 0xFE, ё,я = 0xDE, 0xDF
- """
- Dpr = {0:(set(range(0xA0, 0xAF+1)) | set(range(0xE0, 0xEF+1)) | set((0xF1,))),
- 1:(set(range(0xC0, 0xDF+1)) | set((0xA3,))),
- 2:(set(range(0xD0, 0xEF+1)) | set((0xF1,))),
- 3:(set(range(0xE0, 0xFF+1)) | set((0xB8,))),
- 4:(set(range(0xE0, 0xFE+1)) | set((0xF1, 0xDF)))}
- Dsm = dict.fromkeys(range(5), 0)
- Denc = {0:'cp866',
- 1:'koi8-r',
- 2:'iso8859_5',
- 3:'cp1251',
- 4:'mac_cyrillic'}
- fn = 'text'
- with open(fn + '.txt', 'rb') as f:
- s = f.read(2048)
- t = min(2048, len(s))
- for i in range(t):
- for d in Dpr:
- if s[i] in Dpr[d]:
- Dsm[d] += 1
- enc = Denc[max(Dsm, key=Dsm.get)]
- with open(fn + '.txt', encoding=enc) as f:
- s = f.read()
- with open('f.txt','w', encoding='utf-8') as fw:
- print(s[:2048], file=fw)
- with open('f.txt', encoding='utf-8') as f:
- print(f.read())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement