2016-03-21 9 views
1

Ich rufe die Google Adwords API in Python an und dann protokolliere ich diese Daten in einer CSV Datei und Ich habe es mit dem UnicodeDecode/EncodeError zu tun und habe alles versucht, um es jetzt vergeblich zu verstehen.UnicodeEncodeError: 'Ascii' Codec kann das Zeichen ' xf1' nicht an Position 61 codieren: Ordnungszahl nicht im Bereich (128)

with open('adgroups.csv', 'w', newline='') as csvfile: 
    campaign_name = seed_keyword.title().encode('utf-8','ignore').decode() 
    kw_writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 
    kw_writer.writerow(
     ["CAMPAIGN", "ADGROUP", "MAX BID", "KEYWORD", "MATCH TYPE", "AVERAGE CPC", "SEARCH VOLUME", "COMPETITION"]) 
    for ad_group in ad_group_list: 
     ad_group_name = ad_group['keyword'].title().encode('utf-8','ignore').decode() 
     try: 
      for keyword_data in ad_group['keyword_data_list']: 
       kw_writer.writerow(
        [campaign_name, ad_group_name, str(ad_group['rpc'] * 0.5).encode('utf-8','ignore').decode(), keyword_data['kw'].encode('utf-8','ignore').decode(), "BROAD", 
        str(keyword_data['cpc']).encode('utf-8','ignore').decode(), 
        str(keyword_data['search_volume']).encode('utf-8','ignore').decode(), str(keyword_data['competition']).encode('utf-8','ignore').decode()]) 
       kw_writer.writerow(
        [campaign_name, ad_group_name, str(ad_group['rpc'] * 0.5).encode('utf-8','ignore').decode(), keyword_data['kw'].encode('utf-8','ignore').decode(), "PHRASE", 
        "", 
        "", ""]) 
       kw_writer.writerow(
        [campaign_name, ad_group_name, str(ad_group['rpc'] * 0.5).encode('utf-8','ignore').decode(), keyword_data['kw'].encode('utf-8','ignore').decode(), "EXACT", 
        "", 
        "", ""]) 
     except UnicodeError as e: 
      print(e) 
      print(str(ad_group)) 
      raise 

File "/var/www/html/ARB-Automation/MultiProcessController.py", line 158, in perform_automation 
CSVCampaignSetup.get_in_kw_and_make_adgroups(seed_keyword, ad_group_bid_mapping, cluster_bid_dict) 
File "/var/www/html/ARB-Automation/CSVCampaignSetup.py", line 163, in get_in_kw_and_make_adgroups 
make_single_adgroup_csv(best_ad_group_data) 
File "/var/www/html/ARB-Automation/CSVCampaignSetup.py", line 222, in make_single_adgroup_csv 
str(keyword_data['search_volume']).encode('utf-8','ignore').decode(), str(keyword_data['competition']).encode('utf-8','ignore').decode()]) 

UnicodeEncodeError: 'ascii' Codec Charakter nicht kodieren kann '\ xf1' in Position 61: Ordnungszahl nicht in Reichweite (128)

  1. Warum erhalte ich einen Fehler in erster Linie, wenn Ich habe "ignorieren" erwähnt?
  2. Wie wird das richtig gehandhabt?

Seltsame - Die Stacktrace Note Fehler in Zeile 222, die ein „codiert“ Fehler sind, wie ich es verstehe versucht, eine Byte-Darstellung des Unicode-String zu erstellen. Die Daten in Zeile 222, die codiert werden müssen, sind eine Zahl - int oder float! Wie findet das keine Darstellung unter 127 Bits - daher das ascii-codierte Problem?

Auch habe ich eine Lösung im Sinn - statt kodieren ('utf-8', 'ignorieren'), wenn ich kodiere ('ASCII', 'Ignorieren'), sollte es das Problem nicht lösen? Die Frage bleibt, ob das die ideale Lösung ist?

ich die Rohdaten selbst gedruckt und ich lief für Schritt in den Interpreter diesen Code Schritt, habe ich nicht einen Fehler bekommen dann. Bitte helfen Sie mir.

+0

Schwer zu sicher ohne mehr Code, aber dieser Fehler kann auftreten, wenn Sie versuchen, eine Unicode-Zeichenfolge in einer ASCII-Datei oder einem Terminal zu drucken, oder wenn Sie die Standardcodierung ascii statt utf8 festlegen. –

+0

Ich versuche, in eine CSV-Datei zu schreiben. –

+0

Was passiert, wenn Sie 'str (keyword_data ['search_volume']). Encode ('utf-8')' (und auch für 'keyword_data ['competition']') ohne "ignore" oder ".decode" versuchen() '? –

Antwort

-1

Bitte ändern Sie die nicht englischen Zeichen des Python-Quelldateinamens (Pfad) (in diesem Fall ñ) in englische Zeichen [a-z0-9] und gültige OS-Dateinamenszeichen. Ich benutze Pyscripter und ich hatte dieses Problem.