2012-07-11 1 views
5

파이썬에서는 유니 코드로 인코딩 된 텍스트가 있습니다. 이 텍스트에는 'x'로 변환하려는 줄 바꿈하지 않는 공백이 포함됩니다. 줄 바꿈하지 않는 공백은 chr(160)과 같습니다. 나는 다음과 같은 코드를 가지고 있는데,이 코드는 Localhost를 사용하여 Eclipse를 통해 Django로 실행할 때 훌륭하게 작동한다. 오류가 없으며 비 분리 공백이 변환됩니다. 이 비교하려고하기 때문에파이썬 : 유니 코드의 줄 바꿈하지 않는 공간 바꾸기

'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128) 

내 생각이 오류가 의미한다 : 나는 그것을 (대신 이클립스의 runserver를 통해 파이썬 명령 행, 장고를) 다른 방법을 실행할 때

my_text = u"hello" 
my_new_text = my_text.replace(chr(160), "x") 

그러나 오류가 발생합니다 유니 코드 (my_text)를 유니 코드가 아닌 것으로 변환합니다. 내 질문 :

  1. chr(160)이 유니 코드가 아니면 어떻게해야합니까?
  2. Eclipse에서 실행할 때 어떻게 작동합니까? 이를 이해하면 코드의 다른 부분을 변경해야하는지 판단하는 데 도움이됩니다. 내가 Eclipse에서 내 코드를 테스트 해왔다.
  3. (가장 중요) 비 분리 공백 제거에 대한 원래의 문제를 어떻게 해결할 수 있습니까? my_text은 확실히 유니 코드가 될 것입니다.
  4. 파이썬 2에서

답변

11
  1. , chr(160)은 바이트 값 (160) 또는 헥사 A0를 갖는 하나의 길이의 바이트 스트링이다. 특정 인코딩의 컨텍스트를 제외하고는 별다른 의미가 없습니다.
  2. Eclipse에 익숙하지 않지만 인코딩 트릭을 재생 중일 수 있습니다.
  3. 유니 코드 문자 NO-BREAK SPACE, 즉 코드 포인트 160을 원하면 unichr(160)입니다. 일예로

,

>>> u"hello\u00a0world".replace(unichr(160), "X") 
u'helloXworld 
+0

완벽한, 감사합니다. unichr()은 Eclipse를 통하지 않고 Eclipse를 통해 작동합니다. 이상한 chr()과 unichr()은 Eclipse에서 실행할 때 동일한 결과를 제공합니다. – user984003

+1

Eclipse 구성이 ASCII 대신 기본 인코딩을 UTF8로 변경할 수 있습니다. 권장 사항이 아닙니다. 이제 호환성이 분명해야합니다. 해당 구성에서 작성된 코드는 다른 곳에서 작동하지 않을 수 있습니다. –

+0

실제로 ASCII (0x00에서 0x7F)는 UTF-8의 처음 128 코드 포인트가 ASCII와 같기 때문에 UTF-8과 호환됩니다. 그러나, 0xa0는 확실히 ASCII가 아니므로, 'unichr'대신에'chr'을 사용하는 동안 오류가 발생합니다 ... – dda

관련 문제