2017-09-15 2 views
0

다시 한번 입력이 빌어 먹을 유니 코드 - 지옥 ... 한숨 = (유니 코드 혼란 # 3423435

이 두 파일은 다음과 같습니다

with open('kreise_tmp.geojson') as f: 
jdata = json.loads(f.read()) 
:
$ file * 
kreise_tmp.geojson:  ASCII text 
pandas_tmp.csv:   UTF-8 Unicode text 

내가 이런 첫 번째 파일을 읽어

pandas_data = pd.read_csv(r'pandas_tmp.csv', sep=";") 
:

은이 같은 두 번째 파일을 읽을 수

지금 문자열 안에 무엇이 체크 아웃 :

>>> jdata['features'][0]['properties']['name'] 
u'Kreis Euskirchen' # a unicode string? 

>>> pandas_data['kreis'][0] 
'Kreis D\xc3\xbcren' # not a unicode string? 

왜 파일 유니 코드 문자열은 "ASCII 텍스트"에서 "UTF-8 유니 코드 텍스트"파일에서 문자열 단지 일반 문자열과 문자열은?

+0

'kreise_tmp.geojson' 및'pandas_tmp.csv'의'hexdump'를 첨부하십시오. 또한 스펙에 따르면 json 형식에는 asci가 아닌 기호를 사용할 수 없습니다. 그래서 json은 아마 같은'\ xc3'을 포함하고 있지만'ü'에로드됩니다. 파일을 여는 동안 인코딩을 지정해야한다고 생각합니다.'pd.read_csv'에 encoding param이 있는지 확인하십시오. 수동으로'bytes'를 utf8로 변환 할 필요가 없는지 확인하십시오. – deathangel908

+0

어떤 버전의 파이썬입니까? 파이썬 3.6으로 업그레이드하십시오. –

+2

@ deathangel908 JSON에는 비 ASCII 기호 만 포함 할 수 있습니다. http://json.org/ - "* 모든 유니 코드 문자 * ..." – melpomene

답변

0

당신이 JSON 또한

with open('kreise_tmp.geojson', encoding='utf8') as f: 
    jdata = json.loads(f.read()) 

파이썬 2.7에서와 동일 할 수도 있습니다, 당신이 추가 할 수 있습니다 UTF-8

pandas_data = pd.read_csv(r'pandas_tmp.csv', sep=";", encoding='utf8') 

로 디코딩 할 파일의 개방에 encoding='utf-8'를 추가 파일의 맨 위로 ...

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
+1

마지막 비트는 * 소스 파일 *의 인코딩을 선언합니다. JSON이나 pandas에는 아무런 영향을 미치지 않습니다. 소스의 문자열 상수에 영향을줍니다. –

2

JSON 문자열은 항상 유니 코드입니다.

~$ python2 
>>> import json 
>>> json.loads('"\xc3\xbc"') 
u'\xfc' 

그러나 그들은 종종 \u 탈출 직렬화, 그래서 file는 ASCII를 볼 수 있습니다.

>>> json.dumps(_) 
'"\\u00fc"' 
관련 문제