我正在处理python-lastfm库返回的unicode字符串.
我假设在某个地方,库得到编码错误并返回一个可能包含无效字符的unicode字符串.
例如,我期望变量a中的原始字符串是"Glück"
>>> a u'Gl\xfcck' >>> print a Traceback (most recent call last): File "", line 1, in UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 2: ordinal not in range(128)
\ xfc是转义值252,它对应于"ü"的latin1编码.不知怎的,它以一种python无法独立处理的方式嵌入到unicode字符串中.
如何将此转换为包含原始"Glück"的普通或unicode字符串?我尝试使用解码/编码方法,但要么得到了一个UnicodeEncodeError,要么是一个包含序列\ xfc的字符串.
我注意到以下情况:
>>> u'abc' == 'abc'
True
>>> 'abc' == u'abc'
True
Run Code Online (Sandbox Code Playgroud)
这总是正确的还是可能取决于系统区域设置?(似乎字符串在python 3中是unicode:例如这个问题,但2.x中的字节)
我明白了unicode,编码和解码.但我不明白为什么编码功能适用于str类型.我希望它只适用于unicode类型.因此我的问题是:当它在str而不是unicode上使用时,编码的行为是什么?
我在尝试查找正则表达式中指定的文本时遇到问题.一切都工作得很好但是当我在我的正则表达式中添加"\£"时它开始引起问题.我得到了SyntaxError.文件(...)中的"非ASCII字符"\ xc2"但没有声明编码...
我试图用这个来解决这个问题
import sys
reload(sys) # to enable `setdefaultencoding` again
sys.setdefaultencoding("UTF-8")
Run Code Online (Sandbox Code Playgroud)
但它没有帮助.我只想构建正则表达式并在那里使用井号.标志re.Unicode标志没有帮助,保存字符串作为unicode(拍)没有帮助.有没有解决这个正则表达式的解决方案?我只想构建正则表达式并在那里使用英镑符号.谢谢你的帮助.
k = text.encode('utf-8')
pat = u'salar.{1,6}?([0-9\-,\. \tkFFRroOMmTtAanNuUMm\$\&\;\£]{2,})'
pattern = re.compile(pat, flags = re.DOTALL|re.I|re.UNICODE)
salary = pattern.search(k).group(1)
print (salary)
Run Code Online (Sandbox Code Playgroud)
即使我发表评论错误仍然存在(放"#"并跳过所有这些行.也许它与re.库没有关联,但我的设置?