我正在使用一个小的 Python 脚本来生成一些将在 C 头文件中使用的二进制数据。
此数据应声明为 char[]
,如果可以将其编码为字符串(当它们不在 ASCII 可打印范围内时使用相关的转义序列)会更好chars) 以保持 header 比使用十进制或十六进制数组编码更紧凑。
问题是,当我打印 Python 字符串的 repr
时,它由单引号分隔,而 C 不喜欢这样。天真的解决方案是:
'"%s"'%repr(data)[1:-1]
但是当数据中的一个字节恰好是双引号时,这不起作用,所以我也需要对它们进行转义。
我认为一个简单的 replace('"', '\\"')
可以完成这项工作,但也许有更好、更 pythonic 的解决方案。
加分项:
将数据拆分成大约 80 个字符的行也很方便,但同样是 splitting the source string in chunks 的简单方法大小为 80 的将不起作用,因为每个不可打印的字符在转义序列中占用 2 或 3 个字符。在获取 repr 之后将列表分成 80 个 block 也无济于事,因为它可能会分割转义序列。
有什么建议吗?
最佳答案
你可以试试json.dumps
:
>>> import json
>>> print(json.dumps("hello world"))
"hello world"
>>> print(json.dumps('hëllo "world"!'))
"h\u00ebllo \"world\"!"
我不确定 json 字符串是否与 C 兼容,但至少它们有一个相当大的公共(public)子集并且保证与 javascript 兼容;)。
关于python - 用双引号Python获取str repr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1675181/