我正在写一个python脚本,用日语将一个单词附加到一个普通类型的URL。我的IDE(spyder)完美地显示了日文字符,浏览器和我的服务也是如此,但语言似乎也有问题。例如,当我输入时,我的服务给了我正确的答案: http://example.com/translate?lang=ja&word =こんにちは
然而在我的IDE中:
word = u'こんにちは'
In [29]: url = "http://example.com/translate?lang=ja&word=" + word
In [30]: word
Out[30]: u'\u3053\u3093\u306b\u3061\u306f'
In [31]: url
Out[31]: u'http://example.com/translate?lang=ja&word=\u3053\u3093\u306b\u3061\u306f'
我的服务无法识别该网址。 怎么能修好?
答案 0 :(得分:3)
浏览器url-为您编码查询字符串。您需要在Python中手动执行:
在Python 2.x中,使用urllib.quote
或urllib.quote_plus
:
>>> import urllib
>>> word = u'こんにちは'
>>> url = "http://example.com/translate?lang=ja&word=" + urllib.quote(word.encode('utf-8'))
>>> url
'http://example.com/translate?lang=ja&word=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF'
在Python 3.x中,使用urllib.parse.quote
或urllib.parse.quote_plus
:
>>> import urllib.parse
>>> word = u'こんにちは'
>>> url = "http://example.com/translate?lang=ja&word=" + urllib.parse.quote(word, encoding='utf-8')
>>> url
'http://example.com/translate?lang=ja&word=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF'
替代使用urllib.urlencode
(Python 2.x)
>>> "http://example.com/translate?" + urllib.urlencode({'lang': 'ja', 'word': word.encode('utf-8')})
'http://example.com/translate?lang=ja&word=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF'
使用urllib.parse.urlencode
(Python 3.x)
>>> "http://example.com/translate?" + urllib.parse.urlencode({'lang': 'ja', 'word': word}, encoding='utf-8')
'http://example.com/translate?lang=ja&word=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF'