Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/121: Рейтинг темы: голосов - 121, средняя оценка - 4.93
1 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 22

Определение кодировки и перевод в UTF-8

11.10.2021, 08:45. Показов 25570. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Алекс получил от своего друга Никиты из России электронное письмо с вложенным текстовым файлом (не маленьким – точно больше 100Кб) и был удивлен его содержимым. Алекс давно знаком с Никитой и знает, что текст точно на русском языке, что он все пишет в нижнем регистре, и что Никита принципиально не использует никакие кодировки, кроме однобайтовых. Алекс хотел бы определить, какую кодировку Никита использовал (CP866 (DOS), CP1251 (Windows), KOI8R, ISO-8859-5, cp10007(MacOS)), и увидеть первые 2048 символов этого файла в кодировке UTF-8. Воспользуйтесь имеющимися данными, напишите программу, которая будет определять автоматически определять кодировку и выводить первые 2048 символов этого файла в кодировке UTF-8.


Буду очень благодарен)
Идей нет совсем
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2021, 08:45
Ответы с готовыми решениями:

Определение кодировки в строке и преобразование ее в UTF-8
С помощью этого куска кода я получаю html страницы и записываю как обычную строку в response. Внутри этого кода я регулярными выражениями...

Перевод из кодировки UTF - 8 в ANSI
Всем привет! Пишу прогу на линухе, результаты работы вывожу в html файл. Так вот когда открываю файл для прочтения с помощью браузера там...

Перевод из кодировки UTF-8 в CP866
Нужно сделать функцию, которая переводит текст из кодировки UTF-8 в CP866. То есть с нуля, так-как нельзя использовать стандартные функции....

29
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
16.10.2021, 07:28
Студворк — интернет-сервис помощи студентам
Garry Galler, дал вам главное, алгоритм решения. Вам только осталось написать не сложный код по этому алгоритму. По этому алгоритму будет определяться кодировка основной массы символов даже для битых файлов и для файлов со смешанной кодировкой.

Добавлено через 12 минут
Я скопировал этот алгоритм в свою базу данных. Если мне понадобится решить такую задачу, то я использую этот алгоритм, что бы написать код.
0
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 4
17.10.2021, 18:40
Viktorrus, «Виндосе» — что вы имеете в виду? Слово похоже на «видосе», но по контексту больше подходит «[IBM-совместимый] ПК» (например, в моём случае ASUS VivoBook с (почти не персонализированной) Ubuntu)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
17.10.2021, 23:28
Цитата Сообщение от Orisphera Посмотреть сообщение
«Виндосе» — что вы имеете в виду?
Поленился переключить клавиатуру. Я имел ввиду windows.
Цитата Сообщение от Orisphera Посмотреть сообщение
«[IBM-совместимый] ПК»
. Главное отличие, от которого зависит совместимость, это железо. И компьютеры фирмы IBM и операционные системы фирмы Microsoft создаются для элементной базы Intel и совместимых с Intel. У Макинтоша (Apple) своя , не совместимая с Intel элементная база. Отсюда их полная не совместимость. Программы написанные для Intel, не работают на Макинтоше и наоборот. Apple пытались конкурировать элементной базой с Intel, но они, из за того, что вышли на рынок значительно позже, не смогли победить в конкуренции и вынуждены были занять другую нишу рынка. Это айфоны, а для ПК это графические станции. Таблицы кодов для операционных систем windows и apple тоже разные. Но байты и в том и в другом случае состоят из нулей и единиц, то есть соответствуют двоичным числам, но которые можно записать и в виде шестнадцатеричных чисел.
Garry Galler, используя кодовые таблицы, показал в каких диапазонах находятся коды символов кириллицы для разных кодировок.
0
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 7
19.10.2021, 02:53
Здравствуйте! Подскажите как автоматизировать выбор верной кодировки. Без взаимодействия с пользователем на ум ничего не идет. В сети подходящего решения не нашёл. На большое количество костылей не ругайтесь, я физик, а не программист. Мне просто нужно показать ребенку, что задачи олимпиадного уровня можно решать. Решал с использованием кодировок: cp866, cp1251, ISO-8859-5, koi8-r. Проверял работу программы на текстовых файлах с соответствующей кодировкой. С cp10007 ничего не получилось так как проверял на Linux. Может где исключения надо обработать и лишний код убрать? Решение не жалко, прикладываю.
Вложения
Тип файла: txt cp866.txt (163 байт, 18 просмотров)
Тип файла: txt cp1251.txt (163 байт, 11 просмотров)
Тип файла: txt koi8-r.txt (163 байт, 10 просмотров)
Тип файла: txt ISO-8859-5.txt (163 байт, 7 просмотров)
Тип файла: txt my_solution_to_the_problem.py.txt (2.9 Кб, 22 просмотров)
0
19.10.2021, 13:37

Не по теме:

Цитата Сообщение от System_Failure Посмотреть сообщение
я физик, а не программист. Мне просто нужно показать ребенку, что задачи олимпиадного уровня можно решать.
Так показываете на примерах решения олимпиадных задач по физике, которые Вам по силам решить самому.:)
Вообще то странная постановка. Вы хотите показать то, что и так очевидно. Олимпиадные задачи можно решать, все зависит от таланта и уровня подготовки. Видимо у Вас талант есть, но уровень подготовки у Вас достаточный для решения задач по физике, но в программировании уровень подготовки не достаточный.
Вот и объясните Вашему сыну, что для решения олимпиадных задач нужно обладать достаточным уровнем подготовки. И для этого нужно "учиться, учиться, и еще раз учиться".:)
Garry Galler, дал алгоритм решения задачи. Что бы написать код, нужен определенный уровень подготовки по программированию.

0
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 4
23.10.2021, 13:24
У меня на Linux получилось
Python
1
'a'.encode('maccyrillic')
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
23.10.2021, 18:47
Orisphera, Оказалось все дело просто в том, что в задании дано название кодировки, которое не используется по крайней мере в последних версиях питона. В питоне для работы с кодировкой в MacOS вместо устаревшего названия cp10007, теперь используется имя кодировки maccyrillic, в том числе и для питона под windows.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# определение кодировки файла
#file = open("data.txt", 'w')
#file.write('спам')
#st = file.read()
#file.close
#input('S')
 
# (CP866 (DOS), CP1251 (Windows), KOI8-R, ISO-8859-5)
 
file = open("data.txt", 'wb')
so = 'ёжик'.encode('maccyrillic')
file.write(so)
#st = file.read()
file.close
 
#file = open("data.txt")
#st = file.read()
#print(st)
#file.close
 
 
 
# Программа ВЫВОДИТ:
# В первой строчке выводится заданная строка
# Во второй строчке код каждого символа из данной строки 
              # в шестнадцатеричном формате и в двоичном формате.
# В третьей строчке последовательность байт для заданной строки.
 
def bi(ch):               
    print(hex(ord(ch)), end='->')           # шестнадцатеричный код символа
    return bin(ord(ch))                     # двоичный код символа
 
def codU(s):                                # последовательность байт в двоичном коде.
    bU = s.encode('utf8')
    b = bytearray(bU)
    for i in b:
        sb = bin(i)[2:]
        if len(sb) < 8:
            sb = '0'* (8 - len(sb)) + sb
        print(sb, end='|')     # последовательность байт для заданной строки
    print('')
 
 
if __name__ == '__main__':
    #file = open("data.txt")
    #data = file.read()
    #print(st)
    #file.close
 
    cod = 'maccyrillic'
    file = open("data.txt", encoding=cod)
    data = file.read()
    #print(st)
    file.close
 
    s = data
    #s = 'biби'
    #s = 'a\\o31b'
    print(s)                        # выводит заданную строку
    for ch in s:                    # выводит код очередного символа
        print(bi(ch), end='|')      # в шестнадцатеричном и двоичном формате
    print('')
 
    codU(s)                         # выводит последовательность байт для заданной строки.
 
    input('СТОП')                   # Эта строка нужна, только если вы запускаете код без 
                                    # отладчика, что бы не закрывалось DOS-окно.
Выводит:
Python
1
2
3
ёжик
0x451->0b10001010001|0x436->0b10000110110|0x438->0b10000111000|0x43a->0b10000111010|
11010001|10010001|11010000|10110110|11010000|10111000|11010000|10111010|
Как мы видим шестнадцатеричный код буквы "ё" в кодировке utf8 равен 0x451 и занимает 2 байта.
Python
1
2
3
4
>>> int('451', 16)
1105
>>> chr(1105)
'ё'
Вот Вам и олимпиада по искусственному интеллекту. Дали в задании устаревшие коды.
Может это задание нужно делать не на питоне, а на ЯП, в котором кодировки имеют указанные в задании названия?
0
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 7
23.10.2021, 23:48
Благодарю участников форума за помощь в решении задачи. Подскажите пожалуйста, нужно ли оставлять по окончании работы программы файл UTF-8.txt с подтверждением, что выходные данные представлены в кодировке UTF-8? Или необходимо подключать библиотеку OS и удалять этот файл? Каких либо запретов на этот счет не нашел. Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#Создаем множества с кодами символов строчных букв из каждой кодировки.
 
#'cp866' а-п = 0xA0 - 0xAF, р-я = 0xE0 - 0xEF, ё = 0xF1
#cp866_set = {160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 241}
cp866_set = set()
for i in range(160, 176):
    cp866_set.add(i)
for i in range(224, 240):
    cp866_set.add(i)
cp866_set.add(241)
 
#'koi8-r' а-я = 0xC0 - 0xDF, ё = 0xA3
#koi8-r_set = {163, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223}
koi8_set = set()
for i in range(192, 224):
    koi8_set.add(i)
koi8_set.add(163)
 
#'iso8859_5' а-я = 0xD0 - 0xEF, ё = 0xF1
#iso8859_5_set = {208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 241}
iso8859_5_set = set()
for i in range(208, 240):
    iso8859_5_set.add(i)
iso8859_5_set.add(241)
 
#'cp1251' а-я = 0xE0 - 0xFF, ё = 0xB8
#cp1251_set = {184, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}
cp1251_set = set()
for i in range(224, 256):
    cp1251_set.add(i)
cp1251_set.add(184)
 
#'mac_cyrillic' а-ю = 0xE0 - 0xFE, ё,я = 0xDE, 0xDF
#mac_cyrillic_set = {222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254}
mac_cyrillic_set = set()
for i in range(222, 255):
    mac_cyrillic_set.add(i)
 
file_name = input('')
#открываем файл с именем указанным с клавиатуры
f = open (file_name, "rb")
data = f.read()
 
#сравниваем сколько символов данной кодировки содержится в файле
def count_chars (data, char_set):
    x = 0
    for symb1 in data:
        for symb2 in char_set:
            if symb2 == symb1:
                x += 1
    return x
 
#считаем сколько символов каждой кодировки в файле    
cp866 = count_chars(data, cp866_set)
koi8 = count_chars(data, koi8_set)
iso8859_5 = count_chars(data, iso8859_5_set)
cp1251 = count_chars(data, cp1251_set)
mac_cyrillic = count_chars(data, mac_cyrillic_set)
 
#определяем символов какой кодировки больше
count_list = [cp866, koi8, iso8859_5, cp1251, mac_cyrillic]
max_num = 0
x = 0
for i in count_list:
    if i > max_num:
        max_num = i
        x = count_list.index(max_num) + 1
 
codec_dict = {1 : "cp866",
                       2 : "koi8-r",
                       3 : "ISO-8859-5",
                       4 : "cp1251",
                       5 : "maccyrillic"}
 
#Выбираем кодировку исходного файла для преобразования в UTF-8. И файл-приемник.
encoding_from = codec_dict[x]
new_Filename = "UTF-8.txt"
 
def correctEncoding(file_name, new_Filename, encoding_from, encoding_to='UTF-8'):
    with open(file_name, 'r', encoding=encoding_from) as fr:
        with open(new_Filename, 'w', encoding=encoding_to) as fw:
            for line in fr:
                fw.write(line[:-1]+'\r\n')
 
correctEncoding(file_name, new_Filename, encoding_from, encoding_to='UTF-8')
 
with open("UTF-8.txt", "r", encoding='UTF-8') as file:
    text = file.read(2048)
    print(text)
file.close()    
f.close()
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
24.10.2021, 13:58
Цитата Сообщение от System_Failure Посмотреть сообщение
Подскажите пожалуйста, нужно ли оставлять по окончании работы программы файл UTF-8.txt с подтверждением, что выходные данные представлены в кодировке UTF-8? Или необходимо подключать библиотеку OS и удалять этот файл? Каких либо запретов на этот счет не нашел.
Это вопросы к устроителям олимпиады. Или может знать еще тот, кто участвовал в данной олимпиаде, и у кого приняли решение.
Вы молодец, использовали алгоритм предложенный Garry Galler, и написали код. Хочу только дать одно замечание. Таблицы кодировок, особенно кодировок maccyrillic и CP1251 , имеют пересекающиеся области, где коды символов разных кодировок совпадают. Поэтому, если символы рассматриваемого текста находятся в пределах этой области пересечения, то будут подходить сразу несколько кодировок.
Как это учитывает тестирующая программа олимпиады, я не знаю. Поэтому я всегда критически отношусь к тестирующим программам.
Кстати теперь, когда известно правильное название кодировки для MAC, то можно использовать и предложенный мной алгоритм:
"В цикле подставлять различные кодировки, обрабатывая исключения для не подходящих кодировок и выбрать только те кодировки (в большинстве случаев это будет одна кодировка), для которых не будет возникать исключение. Это и будет искомая кодировка."

Добавлено через 18 минут
System_Failure, Хотя если задание состоит только в том, что бы перевести исходный файл в кодировку utf-8, то не важно, соответствует ли исходный файл одной кодировке или нескольким (что при длине в 2048 символов маловероятно), выводить информацию о кодировке исходного файла не требуется. В этом случае Ваш код полностью соответствует условию.

Добавлено через 14 минут
Хотя алгоритм предложенный Garry Galler , а значит и Ваш код, будет работать и с битыми файлами, а мой алгоритм с битыми файлами работать не будет.

Добавлено через 5 часов 25 минут
System_Failure, Нашел как можно посмотреть названия кодировок используемых конкретной версией питона.
У меня версия 3.8
Python
1
2
>>> import encodings
>>> help(encodings)
Выводит документацию, содержащую 261 строку текста для вашей версии питона.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
>>> import encodings
>>> help(encodings)
Help on package encodings:
 
NAME
    encodings - Standard "encodings" Package
 
MODULE REFERENCE
    https://docs.python.org/3.8/library/encodings
    
    The following documentation is automatically generated from the Python
    source files.  It may be incomplete, incorrect or include features that
    are considered implementation detail and may vary between Python
    implementations.  When in doubt, consult the module reference at the
    location listed above.
 
DESCRIPTION
        Standard Python encoding modules are stored in this package
        directory.
    
        Codec modules must have names corresponding to normalized encoding
        names as defined in the normalize_encoding() function below, e.g.
        'utf-8' must be implemented by the module 'utf_8.py'.
    
        Each codec module must export the following interface:
    
        * getregentry() -> codecs.CodecInfo object
        The getregentry() API must return a CodecInfo object with encoder, decoder,
        incrementalencoder, incrementaldecoder, streamwriter and streamreader
        attributes which adhere to the Python Codec Interface Standard.
    
        In addition, a module may optionally also define the following
        APIs which are then used by the package's codec search function:
    
        * getaliases() -> sequence of encoding name strings to use as aliases
    
        Alias names returned by getaliases() must be normalized encoding
        names as defined by normalize_encoding().
    
    Written by Marc-Andre Lemburg (mal@lemburg.com).
    
    (c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
 
PACKAGE CONTENTS
    aliases
    ascii
    base64_codec
    big5
    big5hkscs
    bz2_codec
    charmap
    cp037
    cp1006
    cp1026
    cp1125
    cp1140
    cp1250
    cp1251
    cp1252
    cp1253
    cp1254
    cp1255
    cp1256
    cp1257
    cp1258
    cp273
    cp424
    cp437
    cp500
    cp720
    cp737
    cp775
    cp850
    cp852
    cp855
    cp856
    cp857
    cp858
    cp860
    cp861
    cp862
    cp863
    cp864
    cp865
    cp866
    cp869
    cp874
    cp875
    cp932
    cp949
    cp950
    euc_jis_2004
    euc_jisx0213
    euc_jp
    euc_kr
    gb18030
    gb2312
    gbk
    hex_codec
    hp_roman8
    hz
    idna
    iso2022_jp
    iso2022_jp_1
    iso2022_jp_2
    iso2022_jp_2004
    iso2022_jp_3
    iso2022_jp_ext
    iso2022_kr
    iso8859_1
    iso8859_10
    iso8859_11
    iso8859_13
    iso8859_14
    iso8859_15
    iso8859_16
    iso8859_2
    iso8859_3
    iso8859_4
    iso8859_5
    iso8859_6
    iso8859_7
    iso8859_8
    iso8859_9
    johab
    koi8_r
    koi8_t
    koi8_u
    kz1048
    latin_1
    mac_arabic
    mac_centeuro
    mac_croatian
    mac_cyrillic
    mac_farsi
    mac_greek
    mac_iceland
    mac_latin2
    mac_roman
    mac_romanian
    mac_turkish
    mbcs
    oem
    palmos
    ptcp154
    punycode
    quopri_codec
    raw_unicode_escape
    rot_13
    shift_jis
    shift_jis_2004
    shift_jisx0213
    tis_620
    undefined
    unicode_escape
    utf_16
    utf_16_be
    utf_16_le
    utf_32
    utf_32_be
    utf_32_le
    utf_7
    utf_8
    utf_8_sig
    uu_codec
    zlib_codec
 
CLASSES
    builtins.LookupError(builtins.Exception)
        CodecRegistryError(builtins.LookupError, builtins.SystemError)
    builtins.SystemError(builtins.Exception)
        CodecRegistryError(builtins.LookupError, builtins.SystemError)
    
    class CodecRegistryError(builtins.LookupError, builtins.SystemError)
     |  Base class for lookup errors.
     |  
     |  Method resolution order:
     |      CodecRegistryError
     |      builtins.LookupError
     |      builtins.SystemError
     |      builtins.Exception
     |      builtins.BaseException
     |      builtins.object
     |  
     |  Data descriptors defined here:
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.LookupError:
     |  
     |  __init__(self, /, *args, **kwargs)
     |      Initialize self.  See help(type(self)) for accurate signature.
     |  
     |  ----------------------------------------------------------------------
     |  Static methods inherited from builtins.LookupError:
     |  
     |  __new__(*args, **kwargs) from builtins.type
     |      Create and return a new object.  See help(type) for accurate signature.
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from builtins.BaseException:
     |  
     |  __delattr__(self, name, /)
     |      Implement delattr(self, name).
     |  
     |  __getattribute__(self, name, /)
     |      Return getattr(self, name).
     |  
     |  __reduce__(...)
     |      Helper for pickle.
     |  
     |  __repr__(self, /)
     |      Return repr(self).
     |  
     |  __setattr__(self, name, value, /)
     |      Implement setattr(self, name, value).
     |  
     |  __setstate__(...)
     |  
     |  __str__(self, /)
     |      Return str(self).
     |  
     |  with_traceback(...)
     |      Exception.with_traceback(tb) --
     |      set self.__traceback__ to tb and return self.
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors inherited from builtins.BaseException:
     |  
     |  __cause__
     |      exception cause
     |  
     |  __context__
     |      exception context
     |  
     |  __dict__
     |  
     |  __suppress_context__
     |  
     |  __traceback__
     |  
     |  args
 
FUNCTIONS
    normalize_encoding(encoding)
        Normalize an encoding name.
        
        Normalization works as follows: all non-alphanumeric
        characters except the dot used for Python package names are
        collapsed and replaced with a single underscore, e.g. '  -;#'
        becomes '_'. Leading and trailing underscores are removed.
        
        Note that encoding names should be ASCII only.
    
    search_function(encoding)
 
FILE
    c:\program files\python38\lib\encodings\__init__.py
 
 
>>>


Добавлено через 30 минут
Кстати в выводимой по help документации для моего питона указана кодировка только mac_cyrillic , но как я проверил, работают оба названия котировки, как mac_cyrillic , так и maccyrillic .
Аналогично и с юникодовской кодировкой.
В выводимой документации указано utf_8 , а работают и названия utf-8, utf8, UTF-8.
То есть разработчики питона заложили возможность использовать и альтернативные названия кодировок, но в документации это не отразили. Нужно об этом помнить.
Однако заранее знать, какие альтернативные кодировки можно использовать, мы не можем. Так для кодировки koi8_r работает и название KOI8-R , но название KOI8R не работает.
Поэтому надежнее использовать название кодировки, которое выводит питон по help , а другие альтернативные названия нужно проверять.
0
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 4
24.10.2021, 18:02
System_Failure, Ваш код можно оптимизировать:
Python
1
2
3
4
5
6
7
8
9
10
11
file_name = input()
#открываем файл с именем указанным с клавиатуры
with open(file_name, "rb") as f:
    data = f.read()
 
def count_chars (data, char_set):
    x = 0
    for symb1 in data:
        if symb1 in char_set:
            x += 1
    return x
и
Python
1
2
3
4
5
encoding_from = codec_dict[x]
 
with open(file_name, 'r', encoding=encoding_from) as f:
    text = f.read(2048)
print(text)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.10.2021, 18:02

Перевод кодировки из utf-8 в windows-1251
Такая проблема: распарсил некоторый xml файл, у которого в атрибут значится кодировка utf-8. Затем решил вывести кое-какие элементы из xml,...

Программа для конвертации тектового файла из кодировки UTF-8 в UTF-16
Привет. Как можно реализовать эту программу на чистом си?

Разные кодировки файлов (ASCII, UTF-8, UTF-16)
Привет всем! Нужно написать программу поиска файлов, содержащих заданную строку. Т.е. пользователь выбирает начальный каталог, задаёт...

Кодировки UTF-8 и UTF-16
Здравствуйте! Есть один вопрос! Например я создал файл test.php в кодировке UTF-8. @header('Content-type: text/html;...

Ошибка кодировки UTF-8
Всем привет проблема следующая формируется xml файл но почему то бьет ошибку раньше все было нормально может кто подскажет в чем может быть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru