我正在尝试在 sqlalchemy 结果中搜索模式(实际上是通过“like”或“op”(“regexp”)(模式)进行过滤,我认为它在某处植入了 regex)——字符串和搜索字符串都是希伯来语,大概是(也许我错了-)-unicode
其中 r = u'לבן'
和 c = u'לבן, 한וד, '
当我执行 re.search(r,c)
时,我得到了 SRE.match
对象
但是当我像这样查询数据库时:
f = session.query(classname)
c = f[0].color
c 给我:
'\xd7\x9c\xd7\x91\xd7\x9f,\xd7\x95\xd7\xa8\xd7\x95\xd7\x93,'
或打印(c):
לבן,ורוד,
几乎相同,但运行 re.search(r,c)
没有匹配对象。
因为我怀疑是 unicode 问题,所以我尝试使用 unicode(c)
转换为 unicode
我得到一个'UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xd7:序号'我猜这意味着这已经是unicode字符串 - 那么这里的问题在哪里?
我更喜欢使用 sqlalchemy 'like'
但我在那里遇到了同样的问题 = 我肯定知道的地方(正如我在示例中显示的数据包含字符串)
我应该以某种方式转换搜索字符串、模式吗?这与unicode有关吗?还有别的吗?
数据库表(我正在查询)排序规则是 utf8_unicode_ci
最佳答案
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'לבן,ורוד,'
如果您的控制台可以显示希伯来语字符。
关于python - 奇怪的 python 正则表达式行为 - 可能连接到 unicode 或 sqlalchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7987981/