如何使Python字符串包含unicode代码点?

时间:2019-08-06 06:36:43

标签: python unicode

我想要一个字符串的ASCII表示形式,该字符串可以包含非ASCII字符,例如德语变音符号。非ASCII字符的编码方式应作为Unicode代码点,例如ß将是\u00df

问题是我的数据库中有那些转义序列。它的显示方式与我想要的一样,但是当用户搜索内容时,他输入的是ß,而不是\u00df。对于ß,我可以简单地制作search_query.replace('ß', r'\u00df'),但是有(许多)更多可能的转义序列。

我尝试过的

>>> name = 'Ein Spaß'
>>> name.encode('ascii', 'backslashreplace')
b'Ein Spa\\xdf'
>>> name.encode('ascii', 'xmlcharrefreplace')
b'Ein Spaß'

我想要得到什么:

'Ein Spa\\u00df'

3 个答案:

答案 0 :(得分:0)

作为一种愚蠢的解决方法,stdlib json编码将使用4位unicode转义符:

>>> name = 'Ein Spaß'
>>> json.dumps(name)
'"Ein Spa\\u00df"'
>>> ast.literal_eval(json.dumps(name)) == name
True

但是,这并不能真正有效地解决您的搜索问题。搜索之前,您需要规范化查询文本。而且,您也想在进入数据库的路上标准化unicode数据-或使用db + ORM来为您处理此类详细信息。

有关this answer的详细信息,请参见unicodedata.normalize

答案 1 :(得分:0)

在可能的情况下以ascii编码 否则用代码点替换为unicode字符串 ord:是一个将字符代码点作为整数基数10的函数

new=[] 
for e in name: 
    try: 

        new.append(e.encode("ascii").decode()) 
    except: 

        new.append(u"\\u%04x"%ord(e)) 
"".join(new)

答案 2 :(得分:0)

如果数据库中的数据存储为转义的unicode,则可以使用codecs.decode并将编码设置为unicode_escape

>>> name = "Ein Spa\\u00df"
>>> codecs.decode(name, "unicode_escape")
'Ein Spaß'
相关问题