“UnicodeEncodeError: кодек 'ASCII' не может закодировать символ”

Это зависит. Если точный ответ действительно имеет значение, сделайте некоторое профилирование и узнайте. Если Вы уверены, что у Вас никогда не будет больше, чем определенное число элементов в наборе, пойдите со Списком. Если число неограниченно, используйте HashSet.

27
задан Mat 4 May 2013 в 10:28
поделиться

3 ответа

Вы пытаетесь передать что-то байтовую строку, но невозможно (из-за нехватки информации, которую вы предоставляете) сказать , что вы пытаетесь передать . Вы начинаете со строки Unicode, которая не может быть закодирована как ASCII (кодек по умолчанию), поэтому вам придется кодировать каким-то другим кодеком (или транслитерировать его, как предлагает @ R.Pate), но это невозможно использовать для скажите , какой кодек вам следует использовать, потому что мы не знаем, что вы передаете байтовую строку, и, следовательно, не знаем, что эта неизвестная подсистема сможет принять и правильно обработать с точки зрения кодеков .

В такой полной темноте, в которой вы нас оставляете, utf-8 является разумным слепым предположением (поскольку это кодек, который может представлять любую строку Unicode точно как строку байтов,

21
ответ дан 28 November 2019 в 05:01
поделиться

Вы пытаетесь преобразовать Unicode в ascii в «строгом» режиме:

>>> help(str.encode)
Help on method_descriptor:

encode(...)
    S.encode([encoding[,errors]]) -> object

    Encodes S using the codec registered for encoding. encoding defaults
    to the default encoding. errors may be given to set a different error
    handling scheme. Default is 'strict' meaning that encoding errors raise
    a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and
    'xmlcharrefreplace' as well as any other name registered with
    codecs.register_error that is able to handle UnicodeEncodeErrors.

Возможно, вам нужно что-то вроде одного из следующих:

s = u'Protection™'

print s.encode('ascii', 'ignore')    # removes the ™
print s.encode('ascii', 'replace')   # replaces with ?
print s.encode('ascii','xmlcharrefreplace') # turn into xml entities
print s.encode('ascii', 'strict')    # throw UnicodeEncodeErrors
32
ответ дан 28 November 2019 в 05:01
поделиться

«Лучший» способ всегда зависит от ваших требований; так какие твои? Подходит ли игнорирование не-ASCII? Следует ли заменить ™ на "(tm)"? (Что выглядит привлекательно для этого примера, но быстро ломается для других кодовых точек - но это может быть именно то, что вам нужно.) Может ли исключение быть именно тем, что вам нужно; теперь вам просто нужно как-то с этим справиться?

Только вы действительно можете ответить на этот вопрос.

способ всегда зависит от ваших требований; так какие твои? Уместно ли игнорировать не-ASCII? Следует ли заменить ™ на "(tm)"? (Что выглядит привлекательно для этого примера, но быстро ломается для других кодовых точек - но это может быть именно то, что вам нужно.) Может ли исключение быть именно тем, что вам нужно; теперь вам просто нужно как-то с этим справиться?

Только вы действительно можете ответить на этот вопрос.

способ всегда зависит от ваших требований; так какие твои? Уместно ли игнорировать не-ASCII? Следует ли заменить ™ на "(tm)"? (Что выглядит привлекательно для этого примера, но быстро ломается для других кодовых точек - но это может быть именно то, что вам нужно.) Может ли исключение быть именно тем, что вам нужно; теперь вам просто нужно как-то с этим справиться?

Только вы действительно можете ответить на этот вопрос.

1
ответ дан 28 November 2019 в 05:01
поделиться
Другие вопросы по тегам:

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