Ich habe ein einfaches Skript, das ich versuche zu automatisieren einige der japanischen Übersetzung, die ich für meinen Job tun.Python 3.5 nicht Unicode-Eingabe von CLI-Argument
import requests
import sys
import json
base_url = 'https://www.googleapis.com/language/translate/v2?key=CANT_SHARE_THAT&source=ja&target=en&q='
print(sys.argv[1])
base_url += sys.argv[1]
request = requests.get(base_url)
if request.status_code != 200:
print("Error on request")
print(json.loads(request.text)['data']['translations'][0]['translatedText'])
Wenn das erste Argument eine Zeichenfolge wie 初期 ist 設定 ク リ ア dieses Skript in Zeile
print(sys.argv[1])
Mit der Nachricht explodieren:
line 5, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in
position 0-6: character maps to <undefined>
auch So kann der Fehler reduziert werden
import sys
print(sys.argv[1])
Was wie ein Codierungsproblem scheint. Ich benutze Python 3.5.1, und das Terminal ist MINGW64 unter Windows7 x64.
Wenn ich schreibe das gleiche Programm in Rust1.8 (und die ausführbaren Datei unter gleichen Bedingungen läuft, das heißt: MINGW64 unter Windows7 x64)
use std::env;
fn main() {
let args: Vec<String> = env::args().skip(1).collect();
print!("First arg: {}", &args[0]);
}
Es produziert die korrekte Ausgabe:
$ rustc unicode_example.rs
$ ./unicode_example.exe 初期設定クリア
First arg: 初期設定クリア
Also versuche ich zu verstehen, was hier passiert. MINGW64 claims, um richtige UTF-8-Unterstützung zu haben, die es auch erscheint. Hat Python 3.5.1 nicht die volle Unterstützung von UTF-8? Ich war unter der Annahme, dass der Umzug nach Python3.X wegen Unicode-Unterstützung war.
verwandt: [Python, Unicode und die Windows-Konsole] (http://stackoverflow.com/q/5419/4279) – jfs
Ignorieren Mingw64 - das Problem ist nur, dass das Windows-Terminal nicht vollständig Unicode unterstützt - Siehe http://stackoverflow.com/questions/36236066/how-to-read-text-copied-from-web-to-txt-file-using-python/36241365#36241365 –