我从数据库中得到一个包含奇怪字符的字符串,这些字符会打断json字符串。在
以下是json字符串:
{"id":13,"code":"cflw`2B2[h1s`lNzF@sPC1FtaCiK0VF@","label":"Anonymous lifestyle App cflw`2B2[h1s`lNzF@sPC1FtaCiK0VF@"}
看起来还可以,但是在i和K之间有“^A”(2B2[h1s`lNzF@sPC1FtaCiK0VF@),我们无法从这里看到它,但如果您将其复制到文本编辑器,它将显示出来。在
我的问题是如何使这个json字符串可解析?或者如何使用Python删除“^A”?在
如果您打开终端并使用真正的ASCII
^A
字符执行以下操作(要编写它,您需要执行C-vC-a):因此,您知道必须从字符串中删除ASCII控制字符
^{pr2}$1
:如果从ASCII表中引用:
(来源:asciitable.com)
这是“开始标题”代码,通常用于获取shell中行的开头。在
注:
ord()
给出一个字符的int等价物(在python中是一个单字符字符串)chr()
给出相当于ascii字符的字符串32
和126
之间最后,无法让JSON解析您提供的精确字符串,因为JSON只处理可打印字符,因此不包含控制字符(当通过套接字或tty端口提供时,这可能会产生不良的副作用)。换句话说,一个包含ASCII控制字符的JSON字符串是JSON。在
在不知道上下文的情况下,如果希望JSON数据只以一种方式工作(内射函数),可以在构建JSON字符串之前从字段(和名称)中删除控制字符。你也可以使用一个散列函数,这样可以使它更小,看起来更好。在
不过,如果您希望它是对称的(双射),您最好将
code
转换成一个整数列表,或者使用base64
这样的代码对其进行编码:使用base64:
或作为整数列表:
生成json字符串:
或者
但最后,在构建JSON之前,您需要在编码时,而不是在解码时,从字符串中删除^A控制字符
^A
是ASCII码的UNIX语言0x01
(在tty中,相当于Ctrl+a)。在实际上,您不应该获取JSON字符串中的原始二进制数据,应该修复生产者(一种典型的方法是base64对二进制数据进行编码)。在
但是,根据您的数据,您可以使用以下命令删除此特定字符:
或使用以下命令删除所有控制字符:
^{pr2}$这将得到一个整数unicode代码数组。找到您想要删除的整数unicode代码,然后使用Python的内置代码进行查找/替换结构更换(旧的,新的)
相关问题 更多 >
编程相关推荐