Advertisement
Guest User

Untitled

a guest
Oct 11th, 2021
1,926
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.36 KB | None | 0 0
  1. """
  2. Алекс получил от своего друга Никиты из России электронное письмо
  3. с вложенным текстовым файлом (не маленьким – точно больше 100Кб)
  4. и был удивлен его содержимым. Алекс давно знаком с Никитой и знает,
  5. что текст точно на русском языке, что он все пишет в нижнем регистре,
  6. и что Никита принципиально не использует никакие кодировки,
  7. кроме однобайтовых.
  8. Алекс хотел бы определить, какую кодировку Никита использовал
  9. (CP866 (DOS), CP1251 (Windows), KOI8R, ISO-8859-5, cp10007(MacOS)),
  10. и увидеть первые 2048 символов этого файла в кодировке UTF-8.
  11.  
  12. Воспользуйтесь имеющимися данными, напишите программу, которая будет
  13. определять автоматически определять кодировку
  14. и выводить первые 2048 символов этого файла в кодировке UTF-8.
  15. """
  16.  
  17. """
  18. 'cp866' а-п = 0xA0 - 0xAF, р-я = 0xE0 - 0xEF, ё = 0xF1
  19. 'koi8-r' а-я = 0xC0 - 0xDF, ё = 0xA3
  20. 'iso8859_5'  а-я = 0xD0 - 0xEF, ё = 0xF1
  21. 'cp1251' а-я = 0xE0 - 0xFF, ё = 0xB8
  22. 'mac_cyrillic' а-ю = 0xE0 - 0xFE, ё,я = 0xDE, 0xDF
  23.  
  24. """
  25. Dpr = {0:(set(range(0xA0, 0xAF+1)) | set(range(0xE0, 0xEF+1)) | set((0xF1,))),
  26.          1:(set(range(0xC0, 0xDF+1)) | set((0xA3,))),
  27.          2:(set(range(0xD0, 0xEF+1)) | set((0xF1,))),
  28.          3:(set(range(0xE0, 0xFF+1)) | set((0xB8,))),
  29.          4:(set(range(0xE0, 0xFE+1)) | set((0xF1, 0xDF)))}
  30. Dsm = dict.fromkeys(range(5), 0)
  31. Denc = {0:'cp866',
  32.         1:'koi8-r',
  33.         2:'iso8859_5',
  34.         3:'cp1251',
  35.         4:'mac_cyrillic'}
  36.  
  37. fn = 'text'
  38. with open(fn + '.txt', 'rb') as f:
  39.     s = f.read(2048)
  40.  
  41. t = min(2048, len(s))
  42. for i in range(t):
  43.     for d in Dpr:
  44.         if s[i] in Dpr[d]:
  45.             Dsm[d] += 1
  46. enc = Denc[max(Dsm, key=Dsm.get)]
  47. with open(fn + '.txt', encoding=enc) as f:
  48.     s = f.read()
  49.  
  50. with open('f.txt','w', encoding='utf-8') as fw:
  51.     print(s[:2048], file=fw)
  52.  
  53. with open('f.txt', encoding='utf-8') as f:
  54.     print(f.read())
  55.  
  56.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement