我想发送中文字符由在线服务翻译,并返回生成的英文字符串。我为此使用了简单的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 形式将其带入,该功能不接受这种形式。
那么,如何将一件事转换为另一件事呢?
我已阅读 Stack Overflow 问题Convert Unicode to a string in Python ( contains extra symbols)。
但这不是我所追求的。Urllib 接受字符串对象但不接受 Unicode 对象,两者都包含相同的信息
好吧,至少在我发送未更改信息的 Web 应用程序的眼中,我不确定它们在 Python 中是否仍然是等价的东西。