我有一個簡單的腳本,我試圖使用自動化一些日文翻譯,我爲我的工作。Python 3.5無法處理來自CLI參數的Unicode輸入
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'])
當第一個參數是像字符串初期設定クリア這個腳本會在行
print(sys.argv[1])
爆炸隨着消息:
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>
所以可得減少
的bugimport sys
print(sys.argv[1])
這似乎是一個編碼問題。我使用的是Python 3.5.1,終端是Windows7 x64下的MINGW64。
當我在寫Rust1.8相同的節目(和可執行文件相同的條件下運行,即:下的Windows7 64 MINGW64)
use std::env;
fn main() {
let args: Vec<String> = env::args().skip(1).collect();
print!("First arg: {}", &args[0]);
}
它產生適當的輸出:
$ rustc unicode_example.rs
$ ./unicode_example.exe 初期設定クリア
First arg: 初期設定クリア
所以我想了解這裏發生了什麼。 MINGW64 claims有正確的UTF-8支持,它也出現了。 Python3.5.1是否沒有完整的UTF-8支持?我認爲轉向Python3.X是因爲Unicode支持。
相關:[Python,Unicode和Windows控制檯](http://stackoverflow.com/q/5419/4279) – jfs
忽略Mingw64 - 問題只是Windows終端本身不支持完整的Unicode - 請參閱http://stackoverflow.com/questions/36236066/how-to-read-text-copied-from-web-to-txt-file-using-python/36241365#36241365 –