2013-02-21 6 views
0
TDB = csv.reader(codecs.open('data/TDS.csv', 'rb', encoding='utf-8'), delimiter=',', quotechar='"') 

ts = db.testCol 

for row in TDB: 
    print row[1] 
    T = {"t":row[1], 
      "s": row[0]} 
    post_id = ts.insert(T) 

내가 utf8 형식으로 인코딩 할 수없는 이유는 데이터를 utf8 형식으로 삽입해야하는 이유입니다.유니 코드 디코드 오류 (Python)

UnicodeDecodeError: 'utf8' codec can't decode byte 0xf3 in position 36: invalid continuation byte 

인코딩 기능을 넣기 전에 나는 이것을 pymongo에서 가져 왔습니다.

bson.errors.InvalidStringData: strings in documents must be valid UTF-8 

내가 추측이는

'compleja e intelectualmente retadora , el ladrÛn de orquÌdeas es uno de esos filmes que vale la pena ver precisamente por su originalidad . ' 

누구든지 내가 어떻게해야합니까 알고 인코딩 할 수없는 데이터입니까? 감사합니다

+0

데이터를 인코딩하지 않고 UTF8로 (디코딩하여) 읽으려고합니다. 파일 "TDS.csv"가 UTF8로 인코딩되어 있는지 확인하십시오. – monkut

+0

@monkut, 내가 무엇을해야하는지 알 수 있습니까? 만약 내가 utf8로 출력하고 pymongo에 저장하고 싶다면. 감사합니다 – 1myb

+0

당신은 먼저 "TDS.csv"라는 인코딩 데이터를 알아야합니다. 또한 csv 모듈은 unicode (codecs.open()이 반환 할 내용)를 지원하지 않습니다. – monkut

답변

1

좋아,이 도움이 될 수 있습니다 .. 여기 인코딩의 목록이 있습니다

:

http://docs.python.org/2/library/codecs.html#standard-encodings

latin-1 유럽 언어에 사용되는 일반적인 인코딩이다가.

인코딩 상대와 기본 흐름은 인코딩 된 콘텐츠

  1. 판독
  2. content.decode ("소스 인코딩")이 원하는 인코딩 유니에서
  3. 인코딩을 유니 코드로, unicode_content.encode ("원하는 인코딩")

당신이 바로 보인다 인코딩을 통과 시도하고 오류가 발생하지 않는 것을 볼 수 있습니다

,691를
enc = "latin-1" 
f = open("TSD.csv", "r") 
content = f.read() # raw encoded content 
u_content = content.decode(enc) # decodes from enc to unicode 
utf8_content = u_content.encode("utf8") 
+0

감사합니다. 어제 나는 이것을 도왔다. 행 [1] .decode ('latin-1'). encode ('ascii', 'xmlcharrefreplace') – 1myb

관련 문제