it-swarm.com.de

UnicodeEncodeError: Codec 'ascii' kann Zeichen u '\ u201c' an Position 34 nicht codieren: Ordinalzahl nicht im Bereich (128)

Ich habe an einem Programm gearbeitet, um Fragen aus dem Stapelüberlauf abzurufen. Bis gestern hat das Programm gut funktioniert, aber seit heute bekomme ich den Fehler 

"Message    File Name   Line    Position    
Traceback               
<module>    C:\Users\DPT\Desktop\questions.py   13      
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 34: ordinal not in range(128)"

Derzeit werden die Fragen angezeigt, aber ich kann die Ausgabe anscheinend nicht in eine neue Textdatei kopieren.

import sys
sys.path.append('.')
import stackexchange
so = stackexchange.Site(stackexchange.StackOverflow)
term= raw_input("Enter the keyword for Stack Exchange")
print 'Searching for %s...' % term,
sys.stdout.flush()
qs = so.search(intitle=term)
print '\r--- questions with "%s" in title ---' % (term)
for q in qs:
  print '%8d %s' % (q.id, q.title)
  with open('E:\questi.txt', 'a+') as question:
     question.write(q.title)

 time.sleep(10)
 with open('E:\questi.txt') as intxt:
   data = intxt.read()

regular = re.findall('[aA-zZ]+', data)
print(regular)

tokens = set(regular)

with open('D:\Dictionary.txt', 'r') as keywords:
  keyset = set(keywords.read().split())


with open('D:\Questionmatches.txt', 'w') as matches:
  for Word in keyset:
    if Word in tokens:
        matches.write(Word + '\n')
27
Aaron Misquith

q.title ist eine Unicode-Zeichenfolge. Wenn Sie das in eine Datei schreiben, müssen Sie sie zuerst kodieren, vorzugsweise eine vollständig Unicode-fähige Kodierung wie UTF-8 (andernfalls verwendet Python standardmäßig den ASCII-Codec, der keinen Zeichencodepoint oberhalb von 127 unterstützt.) .

question.write(q.title.encode("utf-8"))

sollte das Problem beheben.

Das Programm wurde übrigens mit dem Zeichen (U+201C) ausgelöst.

50
Tim Pietzcker

Ich bin auch mit Transifex API darauf gestoßen

response['source_string']

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 3: ordinal not in range(128)

Behoben mit response['source_string'].encode("utf-8")

import requests

username = "api"
password = "PASSWORD"

AUTH = (username, password)

url = 'https://www.transifex.com/api/2/project/project-site/resource/name-of-resource/translation/en/strings/?details'

response = requests.get(url, auth=AUTH).json()

print response['key'], response['context']
print response['source_string'].encode("utf-8")
1
Vinnie James