2012-12-20 1 views
0

를 사용하여 .json 텍스트 파일에 악센트 전자에 악센트 전자 인코딩 데이터를 처리 한 다음 일부 JSON을 출력합니다. 내가 인코딩/디코딩 세부 사항 주위에 내 머리를지고 몇 가지 문제가 있습니다. 이것은 아마도 가장 좋은 예로 설명된다내가 몇 가지를 할 필요가 파이썬 스크립트로 자바 스크립트 소스 파일에서 (그러나 악센트 <code>e</code>와) 단어 <code>cafe</code>을 포함 복사 문자열을 오전 파이썬

$ python 
>>> import urllib2, json 
>>> the_name = "Tasty Caf%C3%E9" 
>>> the_name 
'Tasty Caf%C3%E9' 
>>> the_name_unquoted = urllib2.unquote(the_name) 
>>> the_name_unquoted 
'Tasty Caf\xc3\xe9' 
>>> json.dumps({'bla': the_name_unquoted}) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps 
return _default_encoder.encode(obj) 
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode 
chunks = self.iterencode(o, _one_shot=True) 
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode 
return _iterencode(o, 0) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 9: invalid continuation byte 

분명히 나는 ​​그것을받지 못했습니다하지만 내가 인코딩 작동 방식을 이해하려고 시간을 보냈어요. 정확히 어떤 인코딩/형식 (다른 적절한 용어는 여기에 있습니까?)은 위의 the_name_unquoted이며 utf8이 올바르게 디코딩 할 수 없다는 내용은 무엇입니까?

답변

1

그 이유는 유니 코드 인코딩이 해당 문자를 지원하기 때문입니다. 문자열을 유니 코드로 변환하여이 문제를 해결할 수 있습니다.

the_name = u'Tasty Caf%C3%E9' 

문자열이 이미 있으면 변환 할 수 있습니다.

the_name = 'Tasty Caf%C3%E9' 
the_name = unicode(the_name) 
# or.. 
the_name = the_name.decode('utf8', the_name) 
+0

>>> the_name '='맛의 카페인 % C3 %의 E9의 '유니 >>> the_name = (the_name) >>> 인쇄 urllib2.unquote (the_name)는'상기 수평선 맛을 제공 CafAe' A와 e 위의 악센트 내가 왜 카페에서 'A'를 얻는 지 알기나 해? –

+0

EDIT : 아마 내 데이터 소스의 이상한 유물 ... –