Получите список всей кодировки, к которой может закодировать Python

У некоторых должны быть книги C++, которые помогут Вам избежать общих ловушек C++:

Эффективный C++
Более эффективный C++
Эффективный STL

Эффективная книга STL объясняет вектор проблемы bools:)

60
задан Mark Amery 7 June 2015 в 21:58
поделиться

5 ответов

К сожалению encodings.aliases.aliases.keys () НЕ является подходящим ответом.

псевдонимы (как и следовало ожидать) содержат несколько случаев где разные ключи отображаются в одно и то же значение, например 1252 и windows_1252 оба отображаются в cp1252 . Вы можете сэкономить время, если вместо aliases.keys () вы используете set (aliases.values ​​()) .

НО ЕСТЬ ХУЖЕ ПРОБЛЕМА: псевдонимы не содержит кодеков, у которых нет псевдонимов (например, cp856, cp874, cp875, cp737 и koi8_u).

>>> from encodings.aliases import aliases
>>> def find(q):
...     return [(k,v) for k, v in aliases.items() if q in k or q in v]
...
>>> find('1252') # multiple aliases
[('1252', 'cp1252'), ('windows_1252', 'cp1252')]
>>> find('856') # no codepage 856 in aliases
[]
>>> find('koi8') # no koi8_u in aliases
[('cskoi8r', 'koi8_r')]
>>> 'x'.decode('cp856') # but cp856 is a valid codec
u'x'
>>> 'x'.decode('koi8_u') # but koi8_u is a valid codec
u'x'
>>>

Также стоит отметить, что, несмотря на то, что вы получаете полный список кодеков, может быть хорошей идеей игнорировать кодеки, которые не связаны с наборами символов кодирования / декодирования, но выполняют некоторые другие преобразования, например zlib , quopri и base64 .

Это подводит нас к вопросу, ПОЧЕМУ вы хотите «попробовать кодировать байты во множестве различных кодировок». Если мы это узнаем, мы сможем направить вас в правильном направлении.

Для начала, это неоднозначно. Один кодирует байты в юникод, а другой кодирует юникод в байты. Что вы хотите сделать?

Чего вы действительно пытаетесь достичь: вы пытаетесь определить, какой кодек использовать для декодирования некоторых входящих байтов, и планируете ли это сделать со всеми возможными кодеками? [примечание: latin1 декодирует что угодно] Вы пытаетесь определить язык какого-либо текста в Юникоде, пытаясь закодировать его всеми возможными кодеками? [примечание: utf8 кодирует что угодно].

Это подводит нас к вопросу, ПОЧЕМУ вы хотите «попробовать кодировать байты во множество различных кодировок». Если мы это узнаем, мы сможем направить вас в правильном направлении.

Для начала, это неоднозначно. Один кодирует байты в юникод, а другой кодирует юникод в байты. Что вы хотите сделать?

Чего вы действительно пытаетесь достичь: вы пытаетесь определить, какой кодек использовать для декодирования некоторых входящих байтов, и планируете ли это сделать со всеми возможными кодеками? [примечание: latin1 декодирует что угодно] Вы пытаетесь определить язык какого-либо текста в Юникоде, пытаясь закодировать его всеми возможными кодеками? [примечание: utf8 кодирует что угодно].

Это подводит нас к вопросу, ПОЧЕМУ вы хотите «попробовать кодировать байты во множество различных кодировок». Если мы это узнаем, мы сможем направить вас в правильном направлении.

Для начала, это неоднозначно. Один кодирует байты в юникод, а другой кодирует юникод в байты. Что вы хотите сделать?

Чего вы на самом деле пытаетесь достичь: вы пытаетесь определить, какой кодек использовать для декодирования некоторых входящих байтов, и планируете ли это сделать со всеми возможными кодеками? [примечание: latin1 декодирует что угодно] Вы пытаетесь определить язык какого-либо текста в Юникоде, пытаясь закодировать его всеми возможными кодеками? [примечание: utf8 кодирует что угодно].

Для начала, это неоднозначно. Один кодирует байты в юникод, а другой кодирует юникод в байты. Что вы хотите сделать?

Чего вы действительно пытаетесь достичь: вы пытаетесь определить, какой кодек использовать для декодирования некоторых входящих байтов, и планируете ли это сделать со всеми возможными кодеками? [примечание: latin1 декодирует что угодно] Вы пытаетесь определить язык какого-либо текста в Юникоде, пытаясь закодировать его всеми возможными кодеками? [примечание: utf8 кодирует что угодно].

Для начала, это неоднозначно. Один кодирует байты в юникод, а другой кодирует юникод в байты. Что вы хотите сделать?

Чего вы на самом деле пытаетесь достичь: вы пытаетесь определить, какой кодек использовать для декодирования некоторых входящих байтов, и планируете ли это сделать со всеми возможными кодеками? [примечание: latin1 декодирует что угодно] Вы пытаетесь определить язык какого-либо текста в Юникоде, пытаясь закодировать его всеми возможными кодеками? [примечание: utf8 кодирует что угодно].

latin1 декодирует что угодно] Вы пытаетесь определить язык какого-нибудь текста в Юникоде, пытаясь закодировать его всеми возможными кодеками? [примечание: utf8 кодирует что угодно].

latin1 декодирует что угодно] Вы пытаетесь определить язык какого-нибудь текста в Юникоде, пытаясь закодировать его всеми возможными кодеками? [примечание: utf8 кодирует что угодно].

27
ответ дан 24 November 2019 в 17:40
поделиться

Я сомневаюсь, что в модуле кодеков есть такой метод / функциональность, но если вы видите encoding / __ init __. Py , функция поиска выполняет поиск в папке модулей кодировок, так что вы можете сделать то же самое, например

4
ответ дан 24 November 2019 в 17:40
поделиться

Вероятно, вы можете сделать это:

from encodings.aliases import aliases
print aliases.keys()
1
ответ дан 24 November 2019 в 17:40
поделиться

Вы можете использовать метод для перечисления всех модулей в пакете кодировок .

import pkgutil
import encodings

false_positives = set(["aliases"])

found = set(name for imp, name, ispkg in pkgutil.iter_modules(encodings.__path__) if not ispkg)
found.difference_update(false_positives)
print found
13
ответ дан 24 November 2019 в 17:40
поделиться

Возможно, вам стоит попробовать использовать библиотеку Universal Encoding Detector (chardet) вместо того, чтобы реализовывать ее самостоятельно.

>>> import chardet
>>> s = '\xe2\x98\x83' # ☃
>>> chardet.detect(s)
{'confidence': 0.505, 'encoding': 'utf-8'}
17
ответ дан 24 November 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: