python,使用re.search后无法保存特殊字符,如θæŋ
我在使用re.search之后,无法保存一些特殊字符,比如θæŋ。
我是在Django的模型Textfield中保存这些字符。在管理页面上,我本来想保存θæŋkfəli,结果却得到了
\xce\xb8\xc3\xa6\xc5\x8bkf\xc9\x99li
这是re.search的问题吗? 是管理页面的问题吗? 我保存的方式错了吗?
我该如何搜索字符串中需要的部分,并把包含'θæŋ'字符的内容保存到模型的Textfield中呢?
lines='title="Listen to audio" /></a><span class="pr">/<span class="unicode">ˈ</span>θæŋkfəli/</span> <span class="fl">adverb' #the string which i wan to save exactly as it is, Django saves it correctly
liness=smart_str(lines, encoding='utf-8', strings_only=False, errors='replace') # saves correctly
linesu=smart_unicode(lines, encoding='utf-8', strings_only=False, errors='replace') # saves correctly
在尝试搜索字符串θæŋkfəli后,Django没有保存我需要的特殊字符。结果我得到的是"\xce\xb8\xc3\xa6\xc5\x8bkf\xc9\x99li"
stryc=re.compile('<span\s*class=\"pr\">\s*/\s*<span\s*class="unicode\">(?P<Pronun>.*)<span\s*class=\"fl\">', re.DOTALL)
#\s+/\s+<span class=\"unicode\">\s+[\\a-zA-Z0-9\s]+/\s+</span> '
strys=re.search(stryc, linesu)
Pronun=stryWordcs.groups('Pronun')
text=Pronun.encode('utf-8') # does not covert unicode to letters
Pronun=smart_str(Pronun, encoding='utf-8', strings_only=False, errors='replace') # also does not covert unicode to letters
a=Pronunciation(field=Pronun) # or field=text
a.save()
# Pronun= "θæŋkfəli", nevertheless it is saved as \xce\xb8\xc3\xa6\xc5\x8bkf\xc9\x99li or in unicode
如果我不使用smart_str,我得到的是"\u03b8\xe6\u014bkf\u0259li"
如果我尝试在行中搜索,我无法找到θæŋkfəli,因为特殊字符ˈ(上面的小杠 = \xcb\x88 = \u02c8)导致了问题。
祝好, gintare
1 个回答
当你看到 "\xce\xb8\xc3\xa6\xc5\x8bkf\xc9\x99li
时,其实它和 θæŋkfəli 是一样的,只不过是用十六进制的方式表示。类似地,你也可以把同一组字符表示为
U+03B8 U+00E6 U+014BkfU+0259li
这是因为这些文本是以 Unicode 字符串的形式存储的。想要验证它们其实是一样的,可以把带有特殊字符的文本复制到 这个转换网站 的顶部框中,然后点击转换。Python 可以 处理 Unicode,但根据你用来显示这些字符的工具,显示效果可能会有所不同。
我不太确定你的问题是什么。如果你担心你的正则表达式能否准确匹配 Unicode 字符,Python 的 re
模块有一个选项可以 让它在处理 Unicode 时表现不同。
如果你关心的是这些文本的显示效果,那就要看你是用什么方式来显示的,你需要更具体地描述你的问题。
不过我可以向你保证,Django 正在很好地存储你的字符串。