如何使用Python字符串使相同的代码在2.6、2.7、3.x中工作

2024-06-28 14:52:23 发布

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

我想写一些简单的Python脚本,可以在不同的Python版本上不加修改地使用,但是我在字符串方面遇到了问题。。。你知道吗

text = get_data()  
phrases = [ "Soggarth Eogham O'Growney ,克尔・德怀尔", "capitis #3 病态上升涨大的繁殖性勃现", "IsoldeIsult、第一任威尔士亲王" ]  
for item in phrases:  
    if item not in text:  **# 3.3 ok.  2.7 UnicodeDecodeError**
        print ("Expected phrase '" + item + "' not found")  

上面的代码在3.3中起作用。当我试着在2.7下运行时

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 27: ordinal not in range(128)

通过将第一行更改为

text = get_data().encode('utf-8')

但是,这在3.3上不起作用。有什么办法可以用一个版本的源代码来实现这一点吗? Python怪。你知道吗


Tags: 字符串textin版本脚本datagetnot
1条回答
网友
1楼 · 发布于 2024-06-28 14:52:23

似乎get_data()将返回Unicode字符串。出现错误的原因是将Unicode字符串与8位字符串串联,强制转换(默认情况下,转换将使用ASCII编解码器完成),并且由于数据包含非ASCII字符,因此转换失败。你知道吗

使上述代码正常工作的最佳方法是确保所有字符串都是Unicode,方法是在它们前面加上u“”:

phrases = [ u"Soggarth Eogham O'Growney ,克尔・德怀尔", 
            u"capitis #3 病态上升涨大的繁殖性勃现", 
            u"IsoldeIsult、第一任威尔士亲王" ]  

但是,这只适用于Python2.x和Python3.3。如果您需要使用python3.2或3.1,那么您需要有一个方法,在python2下将其转换为Unicode,但在python3下什么都不做(因为它已经是Unicode了)。你知道吗

这种函数通常称为u(),您可以这样定义它:

import sys
if sys.version < '3':
    import codecs
    def u(x):
        return codecs.unicode_escape_decode(x)[0]
else:
    def u(x):
        return x

相关问题 更多 >