Unicode исключение в витой - PullRequest
       13

Unicode исключение в витой

4 голосов
/ 17 марта 2011

На моем рабочем сервере периодически возникает ошибка Unicode, но не на рабочем столе.Он появляется в журналах:

2011-03-17 13:14:53+0000 [GameProtocol,941,95.78.43.17] <unicode instance at 0x9e304a0 with str error:
     Traceback (most recent call last):
      File "/usr/local/lib/python2.6/dist-packages/twisted/python/reflect.py", line 546, in _safeFormat
        return formatter(o)
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 21-26: ordinal not in range(128)
    >

Это не влияет на логику в приложении, но раздражает в журналах.

Сервер работает под управлением Ubuntu 10.10 Server, Python 2.6.5, Twisted 10.2.0.

Рабочий стол - Ubuntu 10.10 Desktop, Python 2.6.5, Twisted 10.2.0.

Локали одинаковы:

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

Что быпроблема

1 Ответ

5 голосов
/ 17 марта 2011

] Небезопасно регистрировать юникод с помощью системы регистрации Twisted.Вот минимальный пример, который генерирует исключение, которое вы видите:

Python 2.6.4 (r264:75706, Dec  7 2009, 18:43:55)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from twisted.python import log
>>> import sys
>>> log.startLogging(sys.stdout)
2011-03-17 11:03:47-0400 [-] Log opened.
>>> log.msg(u'\N{SNOWMAN}')
2011-03-17 11:03:53-0400 [-] <unicode instance at 140508177816384 with str error Traceback (most recent call last):
      File "/usr/lib/python2.6/dist-packages/twisted/python/reflect.py", line 560, in safe_str
        return str(o)
    UnicodeEncodeError: 'ascii' codec can't encode character u'\u2603' in position 0: ordinal not in range(128)
    >
>>> 

Итак, вам нужно выяснить, какой Unicode регистрируется, и прекратить это делать, возможно, зашифровав его так, как вы хотите, чтобы ваш журналфайлы для кодирования.

...