我正在尝试使用Python的子功能,但我遇到了让它运行起来的问题。从我一直在做的故障排除中我相信它与字符串中的unicode字符有关。
# -*- coding: utf-8 -*-
reload(sys)
sys.setdefaultencoding('utf-8')
import re
someFunction(string):
string = string.decode('utf-8')
match = re.search(ur'éé', string)
if match:
print >> sys.stderr, "It was found"
else:
print >> sys.stderr, "It was NOT found"
if isinstance(string, str):
print >> sys.stderr, 'string is a string object'
elif isinstance(string, unicode):
print >> sys.stderr, 'string is a unicode object'
new_string = re.sub(ur'éé', ur'é:', string)
return new_string
stringNew = 'éégktha'
returnedString = someFunction(stringNew)
print >> sys.stderr, "After printing it: " + returnedString
#At this point in the code string = 'éégktha'
returnString = someFunction(string)
print >> sys.stderr, "After printing it: " + returnedString
所以我想'é:gktha'。下面是我运行此代码时打印到错误日志的内容。
It was found
string is a unicode object
é:gktha
It was NOT found
string is a unicode object
éégktha
所以我认为它必须是带有传递给我的函数的字符串的东西。当我声明为unicode字符串或字符串文字,然后解码它时,找到模式。但是在传入的字符串中找不到该模式。我在想我的string = string.decode('utf-8')
语句会转换传递给函数的任何字符串然后才会起作用。
我试图在python解释器中执行此操作,当我将string声明为unicode字符串时,它可以工作。
string = u'éégktha'
因此,为了模拟我声明字符串的函数,然后'解码'它,然后尝试我的正则表达式语句,它工作。
string = 'éégktha'
newString = string.decode('utf8')
string = re.sub(ur'éé', ur'é:', newString)
print string #é:gktha
此Web应用程序可与许多unicode字符一起使用。这是Python 2.5,在处理unicode字符时我总是很难。非常感谢任何帮助和知识。
答案 0 :(得分:2)
您应该print
someFunction
返回的内容。
>>> string = 'éégktha'
>>> def someFunction(string):
... #string = 'éégktha'
... string = string.decode('utf8')
... new_string = re.sub(ur'éé', ur'é:', string)
... return new_string
>>> import re
>>> someFunction(string)
u'\xe9:gktha'
>>> print someFunction(string)
é:gktha
你的功能很好。在模拟中,当print
解释器打印__str__
return
返回的内容时,您__repr__
打印new_string
返回的内容。 / newString
。