Я хочу отправить китайские иероглифы для перевода онлайн-службой и вернуть полученную английскую строку. Я использую простой JSON и urllib для этого.
И да, я объявляю.
# -*- coding: utf-8 -*-
поверх моего кода.
Теперь все работает нормально, если я передаю urllib объект типа строки, даже если этот объект содержит информацию о Unicode. Моя функция называется translate
.
Например:
stringtest1 = '無與倫比的美麗'
print translate(stringtest1)
приводит к правильному переводу и делает
type(stringtest1)
подтверждает это как строковый объект.
Но если do
stringtest1 = u'無與倫比的美麗'
и попытайтесь использовать мою функцию перевода. Я получаю эту ошибку:
File "C:\Python27\lib\urllib.py", line 1275, in urlencode
v = quote_plus(str(v))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-8: ordinal not in range(128)
После небольшого исследования кажется, что это обычная проблема:
- Проблема: ни urllib2.quote, ни urllib.quote не кодируют аргументы строк unicode
- urllib.quote исключает исключение URL-адреса Юникода
Теперь, если я наберу script
stringtest1 = '無與倫比的美麗'
stringtest2 = u'無與倫比的美麗'
print 'stringtest1',stringtest1
print 'stringtest2',stringtest2
извещение о его возврате:
stringtest1 無與倫æ¯"的美麗
stringtest2 無與倫比的美麗
Но просто введите переменные в консоли:
>>> stringtest1
'\xe7\x84\xa1\xe8\x88\x87\xe5\x80\xab\xe6\xaf\x94\xe7\x9a\x84\xe7\xbe\x8e\xe9\xba\x97'
>>> stringtest2
u'\u7121\u8207\u502b\u6bd4\u7684\u7f8e\u9e97'
получает это.
Моя проблема заключается в том, что я не контролирую, как передаваемая информация подходит к моей функции. И мне кажется, что я должен привести его в форму Unicode, которая не принимается функцией.
Итак, как мне преобразовать одну вещь в другую?
Я прочитал вопрос о переполнении стека Преобразовать Юникод в строку в Python (содержащий дополнительные символы).
Но это не то, что мне нужно. Urllib принимает строковый объект, но не объект Unicode, оба содержат одну и ту же информацию
Ну, по крайней мере, в глазах веб-приложения я отправляю неизмененную информацию, я не уверен, что они все еще эквивалентны в Python.