2011-11-26 6 views
1

다음과 같은 문제가 있습니다. 나는 일식에 내 응용 프로그램을 실행합니다 경우 확인을 작동하지만 때 나는 독립 debuger에서 실행할 수 있습니다 - 나는 다음과 같은 오류 있어요 :이상한 유니 코드 문제

UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: ordinal not in range(128)

내가 그것을 어떻게 해결할 수 있습니까?

내 코드 조각 : 파일을 인코딩하는 내 예를 들어, UTF-8 사용을 알고있는 파이썬 인터프리터를 만들기 위해 파일의 상단에 # -*- coding: utf-8 -*-을 추가 할 수

x = x.replace("Ł", "L") 
+0

조각을'print type (x), repr (x)'로 시작하십시오. 우리에게 결과를 알려주십시오 –

답변

3

제공된 정보가 부족합니다.

Python 2.x를 실행하고 있습니다.

[추측] xstr 개체입니다.

[추측] Eclipse는 기본 인코딩을 UTF-8로 설정합니다.

"표준 디버거"는 기본 인코딩을 ascii로 설정합니다.

결과 : 표시.

솔루션 (유니 코드 작업을위한 표준 운영 절차) :

  • 입력에서 '유니 코드'모든 str 객체를 변환합니다.
  • 유니 코드로 작업하십시오.
  • 출력시 출력을 기대하는 인코딩을 사용하여 모든 unicode 개체를 인코딩하십시오. x는 UTF-8 인코딩 str 객체가 있다면

중요 업데이트는 사실, 당신은 UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 7: etc etc 같은 메시지를 가지고 있어야합니다.

실제 오류 메시지에는 UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: etc etc이 표시됩니다. 이는 불평하는 내용이 (a) unicode 개체 (b) 길이가 8 자 이상임을 나타냅니다. 그러나 사실상 xunicode 개체가 아닙니다. 그렇지 않으면 x.decode ('utf8')가 실패하고 replace의 다른 두 개의 args는 길이가 1 자입니다. 결과적으로 우리에게는 불가능한 것이 있습니다.

print type(x), repr(x) # for Python 2.x 
Lstroke = "Ł" 
print type(Lstroke), repr(Lstroke) 
y = x.replace(Lstroke, 'L') 

을하고 실행 실제 코드를 더한 전체 오류 메시지 및 역 추적를 표시하도록 질문을 수정 :

는이 문제를 해결 도움이됩니다.

그건 그렇고 : u '\ u0144'는 라틴어 작은 편지 N 급히; 그 정보는 전혀 도움이 되나요?

+0

x = x.decode ('utf-8')하기 전에 해결해 주셔서 감사합니다. – Djent

2

보십시오. 파일을 BOM 헤더로 저장하여이 작업을 수행 할 수도 있습니다. 이클립스가 인코딩에 대해 어떻게 암시하는지 모르지만 어쨌든 그들은 sys.setdefaultencoding()을 사용한다.

자세한 내용은 Python 설명서 source code encoding에서 읽을 수 있습니다.

+0

1 행에 인코딩이 있고 이클립스와 파이썬 디버거의 코드는 동일합니다 – Djent

+1

'coding :'줄이 편집기가 파일을 저장하는 실제 인코딩과 일치하는지 확인해야합니다. 또는 더 나은 방법은 ASCII 문자가 아닌 "\ x ??"로 대체하는 것입니다. 'x' 변수의 인코딩에서 16 진수 char 코드입니다. – yak