将Unicode对象中包含非科学符号转换为字符串对象(在Python中)

2024-10-01 11:40:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想发送一个在线服务翻译的中文字符,并有结果的英文字符串返回。我使用的是简单的JSON和urllib。在

是的,我宣布。在

# -*- coding: utf-8 -*-

在我的代码之上。在

现在,如果我给urllib提供一个字符串类型的对象,即使该对象包含Unicode信息,一切都可以正常工作。我的函数名为translate。在

例如:

^{pr2}$

结果是正确的翻译和行为

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

执行it回报:

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的形式将它引入,这是函数不接受的。在

那么,我如何把一件事变成另一件事呢?

我读过堆栈溢出问题Convert Unicode to a string in Python (containing extra symbols)。在

但这不是我想要的。Urllib接受string对象,但不接受Unicode对象,两者都包含相同的信息

好吧,至少在我要发送未更改信息的web应用程序的眼中,我不确定它们在Python中是否仍然是等价的。在


Tags: 对象函数字符串in功能信息unicodeurllib
1条回答
网友
1楼 · 发布于 2024-10-01 11:40:36

当您得到一个unicode对象并希望从中返回一个UTF-8编码的字节字符串,请使用theobject.encode('utf8')。在

奇怪的是,你不知道传入的对象是str还是unicode,当然你也控制了这个函数的调用位置?!但如果真是这样,不管出于什么奇怪的原因,你可能需要这样的东西:

def ensureutf8(s):
    if isinstance(s, unicode):
        s = s.encode('utf8')
    return s

它只对有条件地编码,也就是说,如果它接收到一个unicode对象,而不是它接收的对象已经是一个字节字符串。无论哪种情况,它都返回一个字节字符串。在

顺便说一句,你的困惑似乎是因为你不知道只要在解释器提示符处输入一个表达式就会显示它的repr,这与使用print;-)得到的效果不同。在

相关问题 更多 >