我正在尝试在sqlalchemy结果中搜索一个模式(实际上是通过'like'或'op'('regexp')(模式)过滤我相信在某处植入了正则表达式 - 字符串和搜索字符串都是希伯来语,大概是(也许我错了 - ) - unicode
r = u'לבן'
和c = u'לבן, ורוד, '
的位置
当我re.search(r,c)
时,我得到了SRE.match
个对象
但是当我查询db时:
f = session.query(classname)
c = f[0].color
和c给了我:
'\xd7\x9c\xd7\x91\xd7\x9f,\xd7\x95\xd7\xa8\xd7\x95\xd7\x93,'
或print (c):
לבן,ורוד,
实际上相同,但正在运行re.search(r,c)
没有给我匹配对象。
由于我怀疑是unicode问题,我尝试使用unicode(c)
转换为unicode
我得到一个'UnicodeDecodeError:'ascii'编解码器不能解码位置0中的字节0xd7:ordinal'我想这意味着这已经是unicode字符串 - 所以这里的捕获位置是什么?
我更喜欢使用sqlalchemy 'like'
,但我得到同样的问题=我确切知道的地方(正如我在我的示例中所示,数据包含字符串)
我应该以某种方式转换搜索字符串吗?这与unicode有关吗?别的什么?
db表(我正在查询)整理是utf8_unicode_ci
答案 0 :(得分:3)
c = f[0].color
没有返回Unicode字符串(或者它的repr()
会显示u'...'
种字符串),而是UTF-8编码的字符串。
尝试
c = f[0].color.decode("utf-8")
导致
u'\u05dc\u05d1\u05df,\u05d5\u05e8\u05d5\u05d3,'
或
u'לבן,ורוד,'
如果你的控制台可以显示希伯来字符。
答案 1 :(得分:2)
'\xd7\x9c\xd7\x91\xd7\x9f,\xd7\x95\xd7\xa8\xd7\x95\xd7\x93,
是字符串u'לבן, ורוד, '
的编码表示。所以在第二个例子中你应该写re.search(r,c.decode('utf-8'))
除了设置编码参数之外,您尝试执行的操作几乎相同。它使python尝试ascii编码