2016-07-21 9 views
1

エラーコードは次のとおりです。 -UnicodeEncodeError: 'ascii'コーデックで文字 'u'\ xe9'を位置にエンコードできません9:ここでは序ない範囲内(128)JSONとCSVのPythonエンコーディングの問題

は私のスクリプトです:

import logging 
import urllib 
import csv 
import json 
import io 
import codecs 

with open('/home/local/apple.csv', 
      'rb') as csvinput: 
    reader = csv.reader(csvinput, delimiter=',') 
    firstline = True 
    for row in reader: 
     if firstline: 
      firstline = False 
      continue 

     address1 = row[0] 
     print row[0] 
     locality = row[1] 
     admin_area = row[2] 
     query = ' '.join(str(x) for x in (address1, locality, admin_area)) 
     normalized = query.replace(" ", "+") 
     BaseURL = 'http://localhost:8080/verify?country=JP&freeform=' 
     URL = BaseURL + normalized 
     print URL 
     data = urllib.urlopen(URL) 
     response = data.getcode() 
    print response 

     if response == 200: 
      file= json.load(data) 
     print file 
     output_f=open('output.csv','wb') 
     csvwriter=csv.writer(output_f) 
      count = 0 
      for f in file: 
     if count == 0: 
      header= f.keys() 
      csvwriter.writerow(header) 
      count += 1 
     csvwriter.writerow(f.values()) 
     output_f.close() 
     else: 
      print 'error' 

誰も私が本当に迷惑なってこの問題を解決することができます。私はutf8にエンコードする必要があります

答えて

1

pythonの標準オープンではなく、使用しているコーデックをオプションで渡すことができるコーデックを使用してください。標準的なPythonのオープンがこれを行うことができるPython 3では少し混乱します。

with codecs.open('/home/local/apple.csv', 
     'rb', 'utf-8') as csvinput: 

output_f = codecs.open('output.csv','wb', 'utf-8') 

オプションのエラーPARMのデフォルトバイトが与えられたエンコーディングにマップすることができない場合は例外を発生させた「厳格」に:あなたは、開いているあなたの2行ので

。いくつかの文脈では、 'ignore'または 'replace'を使いたいかもしれません。

さらに詳しい情報はthe python docを参照してください。

+0

UnicodeEncodeError: 'ascii'コーデックは文字u '\ ufeff'を位置0にエンコードできません:序数は範囲外です(128) – ABaut

+0

どのコード行がエラーをスローしていますか? –

+0

ファイル "Python48.py"、16行目、 リーダーの行: UnicodeEncodeError: 'ascii'コーデックは、文字u '\ ufeff'を位置0にエンコードできません:序数は範囲内にありません(128) – ABaut

関連する問題