Я хочу отправить китайские иероглифы для перевода онлайн-сервисом и получить полученную английскую строку. Я использую простой JSON и urllib для этого.
И да, я заявляю.
# -*- coding: utf-8 -*-
поверх моего кода.
Теперь все работает нормально, если я передаю urllib объект строкового типа, даже если этот объект содержит то, что будет информацией Unicode. Моя функция называется translate
.
Например:
stringtest1 = '無與倫比的美麗'
print translate(stringtest1)
приводит к правильному переводу и выполнению
type(stringtest1)
подтверждает, что это строковый объект.
Но если сделать
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)
После небольшого исследования кажется, что это общая проблема:
Теперь, если я наберу скрипт
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, которая не принимается функцией.
Итак, как мне преобразовать одну вещь в другую?
Я прочитал вопрос переполнения стека Преобразование Unicode в строку в Python (содержащую дополнительные символы) .
Но я не об этом. Urllib принимает строковый объект, но не объект Unicode, оба содержат одинаковую информацию
Ну, по крайней мере, в глазах веб-приложения, которому я отправляю неизмененную информацию, я не уверен, что они все еще эквивалентны в Python.