1

Ein Benutzer gibt eine Zeichenfolge auf meiner Website ein. Sie geben ein nicht-ASCII-Zeichen ein.Python3-Druckfunktion gibt 'ASCII' aus Codec kann Zeichenfehler nicht codieren

Das Javascript speichert ihre Eingabe, verpackt sie mit JSON.stringify() und sendet sie an den Server.

Der Server, läuft Python3, entpackt das JSON mit json.loads und speichert diese Zeichenfolge in einem Node-Objekt, läuft dann die Leitung

print('looks like {}'.format(node_obj)) 

ich den Fehler erhalten

'ascii' codec can't encode character error '\u2212' in position 941: ordinal not in range(128) 

Es scheint, zu mir, dass die Druckfunktion in Python3 versucht, die Unicode-Zeichenfolge in ASCII zu konvertieren! (Konvertieren in Byte-Objekt mit Ascii-Codierung?)

Ist es möglich, dass mein FreeBSD-Server UTF-8 nicht unterstützt, wodurch Python-Druckfunktion diese Konvertierung vornehmen? Oder vielleicht wurde die Zeichenfolge überhaupt nicht richtig bereinigt, und ich sollte das in dem Javascript tun, wenn ich es zum ersten Mal vom Benutzer erhalte?

Lassen Sie mich wissen, welche weiteren Informationen für Sie nützlich sind.

Antwort

2

Was sagt der Befehl locale?

Sie können Python verwenden utf-8 entweder mit LANG=en_US.UTF-8 oder PYTHONIOENCODING=utf-8.

Einstellen LANG in der Standardumgebung ist plattformabhängig: https://unix.stackexchange.com/questions/342817/how-do-i-add-a-language-in-freebsd

+0

% locale LANG = LC_CTYPE = "C" LC_COLLATE = "C" LC_TIME = "C" LC_NUMERIC = "C" LC_MONETARY = "C" LC_MESSAGES = "C" LC_ALL = – mareoraft

+0

Ich denke, dass 'Export LANG =" en_US.UTF-8 "' arbeitete für mich. Ich werde eine Weile warten, bevor ich eine Antwort akzeptiere, weil ich sicherstellen will, dass es korrekt ist. – mareoraft

+0

Ja, die Umgebungsvariable LANG für die Verwendung von UTF-8 auf die für Ihr Betriebssystem geeignete Weise einzustellen, ist die richtige Lösung. – mareoraft

Verwandte Themen