LINUX.ORG.RU

[питун] что -то не то с кодировкой


0

1
Type: <type 'exceptions.UnicodeEncodeError'>    Exception: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

может кто -то это расшифровать?
эксепшен тут, происходит только если в body есть русские буковки:

posted = user.api.PostUpdates(body,in_reply_to_status_id=in_reply_to_status_id)

функция — из библиотеки twitter.py
вот она -

  def PostUpdates(self, status, continuation=None, **kwargs):
    '''Post one or more twitter status messages from the authenticated user.

    Unlike api.PostUpdate, this method will post multiple status updates
    if the message is longer than 140 characters.

    The twitter.Api instance must be authenticated.

    Args:
      status:
        The message text to be posted.  May be longer than 140 characters.
      continuation:
        The character string, if any, to be appended to all but the
        last message.  Note that Twitter strips trailing '...' strings
        from messages.  Consider using the unicode \u2026 character
        (horizontal ellipsis) instead. [Defaults to None]
      **kwargs:
        See api.PostUpdate for a list of accepted parameters.
    Returns:
      A of list twitter.Status instance representing the messages posted.
    '''
    results = list()
    if continuation is None:
      continuation = ''
    line_length = CHARACTER_LIMIT - len(continuation)
    lines = textwrap.wrap(status, line_length)
    for line in lines[0:-1]:
      results.append(self.PostUpdate(line + continuation, **kwargs))
    results.append(self.PostUpdate(lines[-1], **kwargs))
    return results
★★★★★

Во-первых, путхон не нужен. Во-вторых, проблема видимо в том, что первые пять символов (они же русские буквы) не влезают в диапазон древней 8-битной кодировки ASCII (у них код символа больше 127). Я в пэйзтхауне не разбираюсь, но меня удивляет, что используется ascii codec, а не какой-нибудь utf-8 codec например. Так что, по-моему, надо попытаться либо поменять этот codec на юникодный, либо как-то перекодировать body в ascii, перед тем, как передавать его в метод.

CARS ★★★★
()
Ответ на: комментарий от CARS

хм...

a = u'абракадабра'

b = str(a)


Traceback (most recent call last):
File «<stdin>», line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-10: ordinal not in range(128)


snoopcat ★★★★★
() автор топика

>питун

К логопеду быдло!

fat_angel ★★★★★
()
Ответ на: комментарий от snoopcat

если тут:
posted = user.api.PostUpdates(body,in_reply_to_status_id=in_reply_to_status_id)

заменить body на body.encode('ascii'), то ошибки нету, но русские буквы не отправляются

snoopcat ★★★★★
() автор топика
Ответ на: комментарий от stormblastt

это есть в начале файла
и в body корректное сообщение с кириллическими символами

snoopcat ★★★★★
() автор топика

Блин, пиши нормально теги. Я твое сначала сообщение прочитал как «[путин]что -то не то с кодировкой» и долго не мог понять что за фигня.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Я твое сначала сообщение прочитал как «[путин]что...

Ты слишком много читаешь. Переключись лучше на бухло.

На лицо типичное ускорение чтения текста мозгом. Где-то я про это читал. Мозг не тратит много времени на анализ взаимного расположения распознанных образов, при этом ускоряется процесс чтения, но возможны ошибки, когда встречаются слова с переставленными буквами, которые прочитываются, хотя не должны.

В данном случае удивительно, что возникла путиница с пятибуквенным словом. Тут что-то одно из двух:

1. Либо тебе везде мерещится слово „Путин“.

2. Либо ты очень много читаешь.

pathfinder ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.