UnicodeDecodeError: 'ascii' codec kann nicht decodieren byte 0x96 in position 10: ordinal not in range(128)

Wie bekomme ich Daten aus einer UTF-8-kodierten MySQL-Datenbank, ohne dass die UnicodeDecodeError? Ich mache eine Webseite mit Python-und HTML-Vorlagen. Hier ist der code, den ich verwendet, um die Sachen aus der Datenbank, die schien zu funktionieren, bevor ich wechselte die Datenbank-Kodierung zu UTF-8:

@app.route("/songs")
def content_database_song():
  c = connect_db()
  c.execute("
  SELECT * FROM Tracks
  JOIN Artists USING (ArtistID)
  JOIN Albums USING (AlbumID)
  JOIN Songs USING (SongID)
  ORDER BY UPPER(SoName), UPPER(AlTitle)
  ")
  songslist = []
  rows = c.fetchall()
  for row in rows:
    songslist.append(row)
  return render_template("/song-index.html", songslist = songslist)

Hier ist der komplette traceback:

UnicodeDecodeError
UnicodeDecodeError: 'ascii' codec can't decode byte 0x96 in position 10: ordinal not in range(128)

Traceback (most recent call last)

File "/Library/Python/2.7/site-packages/Flask-0.7.2-py2.7.egg/flask/app.py", line 1306, in __call__
return self.wsgi_app(environ, start_response)
File "/Library/Python/2.7/site-packages/Flask-0.7.2-py2.7.egg/flask/app.py", line 1294, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/Library/Python/2.7/site-packages/Flask-0.7.2-py2.7.egg/flask/app.py", line 1292, in wsgi_app
response = self.full_dispatch_request()
File "/Library/Python/2.7/site-packages/Flask-0.7.2-py2.7.egg/flask/app.py", line 1062, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Library/Python/2.7/site-packages/Flask-0.7.2-py2.7.egg/flask/app.py", line 1060, in full_dispatch_request
rv = self.dispatch_request()
File "/Library/Python/2.7/site-packages/Flask-0.7.2-py2.7.egg/flask/app.py", line 1047, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/samuelbradshaw/Sites/praises/index.py", line 59, in content_database_song
return render_template("/song-index.html", songslist = songslist)
File "/Library/Python/2.7/site-packages/Flask-0.7.2-py2.7.egg/flask/templating.py", line 121, in render_template
context, ctx.app)
File "/Library/Python/2.7/site-packages/Flask-0.7.2-py2.7.egg/flask/templating.py", line 105, in _render
rv = template.render(context)
File "/Library/Python/2.7/site-packages/Jinja2-2.6-py2.7.egg/jinja2/environment.py", line 894, in render
return self.environment.handle_exception(exc_info, True)
File "/Users/samuelbradshaw/Sites/praises/templates/song-index.html", line 1, in top-level template code
{% extends "database-nav.html" %}
File "/Users/samuelbradshaw/Sites/praises/templates/database-nav.html", line 1, in top-level template code
{% extends "layout.html" %}
File "/Users/samuelbradshaw/Sites/praises/templates/layout.html", line 26, in top-level template code
{% block content %}{% endblock %}
File "/Users/samuelbradshaw/Sites/praises/templates/database-nav.html", line 13, in block "content"
{% block subcontent %}
File "/Users/samuelbradshaw/Sites/praises/templates/song-index.html", line 47, in block "subcontent"
<strong>Related Scriptures:</strong> {% if song.SoRelatedScriptures != "" %}{{song.SoRelatedScriptures}}{% else %}None{% endif %}<br>
File "/Library/Python/2.7/site-packages/Jinja2-2.6-py2.7.egg/jinja2/_markupsafe/_native.py", line 21, in escape
return Markup(unicode(s)
UnicodeDecodeError: 'ascii' codec can't decode byte 0x96 in position 10: ordinal not in range(128)
Poste den gesamten traceback, bitte. Das wird zumindest geben uns eine gewisse Vorstellung wo, die Sie bekommen, den Fehler zu finden.
Meine Vermutung ist, dass Sie wechseln sollten wieder von UTF-8. Schau mal hier: stackoverflow.com/questions/7873556/...
Wenn das erste byte, dass guff.decode('ascii') beschwert sich über ist 0x96, dann guff ist nicht in UTF-8 codiert -- 0x96 ist KEINE gültige UTF-8-start-byte. Ich würde vorschlagen, einfügen print repr(row) im inneren, dass for Schleife, so dass wir genau sehen können, was Sie haben, anstatt zu raten. Was war der Datenbank-Codierung, bevor Sie schaltet es auf UTF-8? Haben Sie und laden Sie alle Ihre text-Daten nach der Umstellung?
Es war latin1, bevor schaltete ich es auf UTF-8. Ich musste es wechseln, weil es würde nicht lassen Sie mich in bestimmten Satzzeichen (wie die geschweifte Apostroph und Bindestriche).
Sie sollten nicht nur Schalter, aber konvertieren die Datenbank auf UTF-8. Ich es oft Tat, backup, export zu sql, erstellen Sie eine neue in UTF-8, import, umbenennen, neuen und alten, überprüfen Sie einige Zeit, löschen Sie die alte.

InformationsquelleAutor Samuel Bradshaw | 2012-04-22

Schreibe einen Kommentar