2011-03-17 5 views
4

내 프로덕션 서버에서 주기적으로 유니 코드 오류가 발생하지만 내 데스크톱에서는 발생하지 않습니다. 로그에 표시됩니다 :유니 코드 예외가 뒤틀림

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 

어떤 문제가 있을까요?

답변

5

] Twisted logging 시스템으로 유니 코드를 기록하는 것은 안전하지 않습니다.

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) 
    > 
>>> 

그래서 당신은 유니 코드가 기록되고 있는지 알아 내고 당신이 로그 파일을 원하는 방식으로 무엇도 아마 그것을 인코딩하여, 그 일을 중지해야 : 여기 당신이보고있는 예외를 생산하는 최소한의 예입니다 인코딩 할 수 있습니다.

+1

유니 코드 로깅의 출처를 이해하는 방법이 있습니까? – Soid