Алекс получил от своего друга Никиты из России электронное письмо с вложенным текстовым файлом (не маленьким – точно больше 100Кб) и был удивлен его содержимым. Алекс давно знаком с Никитой и знает, что текст точно на русском языке, что он все пишет в нижнем регистре, и что Никита принципиально не использует никакие кодировки, кроме однобайтовых.
Алекс хотел бы определить, какую кодировку Никита использовал (CP866 (DOS), CP1251 (Windows), KOI8R, ISO-8859-5, cp10007(MacOS)), и увидеть первые 2048 символов этого файла в кодировке UTF-8.
Воспользуйтесь имеющимися данными, напишите программу, которая будет определять автоматически определять кодировку и выводить первые 2048 символов этого файла в кодировке UTF-8. На python пж
Python
Код на программу python пж
https://pastebin.com/eLVQnbd4
Кодировка Mac OS CP10007 не работает на винде, поэтому закомментил. А так надо раскомментить полный список кодировок
Кодировка Mac OS CP10007 не работает на винде, поэтому закомментил. А так надо раскомментить полный список кодировок
По-моему так:
https://pastebin.com/252eUit4
Только я не понял куда надо выводить текст в кодировке utf-8, ведь в консоль по-моему будут крякозябры, поэтому вывел в файл с этой кодировкой.
Тот же код, что и по ссылке, но с риском, что ответ. мэйл. ру его покорежит:
-------------------------------------------------------
"""
Алекс получил от своего друга Никиты из России электронное письмо
с вложенным текстовым файлом (не маленьким – точно больше 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())
https://pastebin.com/252eUit4
Только я не понял куда надо выводить текст в кодировке utf-8, ведь в консоль по-моему будут крякозябры, поэтому вывел в файл с этой кодировкой.
Тот же код, что и по ссылке, но с риском, что ответ. мэйл. ру его покорежит:
-------------------------------------------------------
"""
Алекс получил от своего друга Никиты из России электронное письмо
с вложенным текстовым файлом (не маленьким – точно больше 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())
Привет, можешь мне этот фаил в вк скинуть?
Похожие вопросы
- Ошибка в коде стандарт PEP8 Python
- Ошибка в программе Python.
- Напишите код к задаче python
- Почему код не работает python
- Преобразовать код pascal в python
- Как использовать переменную созданную в def во всей программе python
- Как сделать свою иконку ярлыка программы python'а
- Как закрыть приложение PyQt5 чрез код другой программы.
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле
- Помогите написать программу на Python, моя версия кода на скрине, вроде всё работает, но автопроверка не проходит.
Лучше так
https://pastebin.com/UWN3Pyxp
Просто октрыть файл во всех кодировках и посчитать в каком случае максимально совпадает с алфавитом.
---------
encs = set(['cp866',
~ 'koi8-r',
~ 'iso8859_5',
~ 'cp1251',
~ 'mac_cyrillic'])
abc = set('абвгдеёжзийклмнопрстуфхцчшщъыьэюя')
mx = 0
enc = 'aaa'
for e in encs:
~with open('text.txt', encoding=e) as f:
~~t = 0
~~s = f.read(2048)
~~for a in s:
~~~if a in abc:
~~~~t += 1
~~if mx < t:
~~~mx = t
~~~enc = e
print(enc)
with open('text.txt', encoding=enc) as f:
~s = f.read(2048)
with open('f.txt','w', encoding='utf-8') as fw:
~print(s, file=fw)
with open('f.txt', encoding='utf-8') as f:
~print(f.read())