2012-09-02 2 views
3

일부 관련 문제가 발견되었지만 유니 코드를 다루는 방식이 다르므로 문제를 해결할 수 없습니다.Python 프로그램이 Eclipse에서 작동하지만 직접 실행하지 않습니다. (유니 코드)

내 전체 코드를 붙여하지 않습니다하지만 난이 고립 된 예제 코드 오류 복제 확신 : (나는 또한 GUI를위한 WX를 사용하고 있으므로이 클래스 내부처럼)

#coding: utf-8 
... 
something = u'ЧЕТЫРЕ' 
//show the Russian text in a Label on the GUI 
self.ExampleLabel.SetValue(str(self.something)) 

을 Eclipse에서는 모든 것이 완벽하게 작동하며 러시아 문자를 표시합니다.

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: 
ordinal not in range(128) 

나는 이것이 CL은 유니 코드 문자를 OUPUT 할 수없는 이클립스가 behind- 일을 함께 할 수있는 뭔가가 생각 : 나는 바로 내가 CL에이 오류가 파일을 통해 파이썬을 열려고하지만 때 현장의 마술. 자체적으로 작동하도록 만드는 방법에 대한 도움?

+0

왜 'str()'을 호출합니까? 한국어 텍스트를 처리해야하는 GUI를 만들었고 WxPython 위젯이 기본적으로 유니 코드를 지원한다는 것을 알았습니다. – acattle

+0

와우 네가 맞아, 나는 내가 str()을 필요로하는 숫자를 가지고 일하기 시작했다는 것을 알았다. 직접 사용할 수 있는지 몰랐습니다. –

+0

유니 코드 데이터 유형과 문자열 데이터 유형을 혼합하는 것이 인코딩 오류로 끝나는 텍스트를 연결할 때주의해야 할 몇 가지 문제점이있었습니다. 자신이하는 일에 신중을 기하면서 필요한 곳에 변수를 전달해야합니다. – acattle

답변

1

대신 self.something.encode('utf-8')을 시도하십시오.

5

인코딩을 지정하지 않고 무언가에 str()을 호출하면 프로그램에서 실행되는 환경에 따라 기본 인코딩이 사용됩니다. Eclipse에서는 명령 행과 다릅니다.

대신 명시 적으로 지정, 기본 인코딩에 의존하지 마십시오

self.ExampleLabel.SetValue(self.something.encode('utf-8')) 

당신은 Python Unicode HOWTO 유니 코드 객체와 무엇을 인코딩 및 str() 이해하는 공부를 할 수 있습니다. wxPython 프로젝트에는 page on Unicode usage도 있습니다.

+0

감사합니다. 실제로 이것을 사용할 수 있습니다. Thansk는 더 읽기에 또한 연결을 위해. :) –

+0

실제로 변수가 int 또는 unicode 문자열 일 수 있기 때문에 뭔가 잘못 될 수도 있습니다. int를위한 encode 메소드가 없으므로 사용할 수 없습니다. 이 나쁜 디자인인가, 아니면 비록 문자열로 취급하고자하는 int이기 때문에 두 경우 모두를 처리 할 수있는 방법이 있습니다. 하지만 str()을 사용하여 형변환하는 것은 유니 코드에서 작동하지 않습니다. –

+0

두 가지 작업을 할 수 있습니다 :'try : except :'블록을 사용하거나'if isinstance (self.something, int) :'를 테스트하고 두 경우 모두를 처리하도록 코드를 분기하십시오. –

1

str 대신 repr을 사용하면 변환을 처리해야하며 객체가 항상 string 유형이 아닐 수도 있지만 대다수의 따옴표 또는 유니 코드도 제공한다는 것을 알 수 있습니다 너의 맥락에서 너. repr은 str - str이 ascii 인코딩을 사용하는 것보다 안전합니다. 그러나 repr은 코드에서 볼 수있는 것과 같은 방식으로 코드 포인트를 보여줄 것입니다. eval로 래핑하면 다시 원래대로 변환해야하기 때문입니다. 대부분의 파이썬 코드가 ascii로 작성 되었기 때문에 파이썬 코드가있는 형태, 즉 ASCII 안전성이 있어야합니다.

+0

나는 이것이 기쁘다. 나는이 이슈의 변종을 가지고있다. (. utode ("utf-8")을 사용할 때조차도 명령 행에서 일식이 아니다.) repr()로 바꿨을 때 잘 동작했다. – rydgaze

관련 문제