python - 用双引号Python获取str repr

标签 python c escaping

我正在使用一个小的 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/

相关文章:

php - 如何使用 PHP 运行 PostgreSQL LIKE 查询

python - 如果提供了文件的绝对路径,如何消除 zip 存档中的绝对路径?

c - MPI_Gatherv 内存问题(MPI+C)

c - C 版本之间的主要区别?

coldfusion - 如何使用单引号和双引号设置变量?

bash - 在 sed 表达式中转义替换字符串中的 '\' 字符

python - 基本 numpy 乘法的问题

python - py.test SetUp/TearDown 用于整个测试套件

python - 为什么要在 python 3.5 + 中使用类型

c - 将动态数组传递给 C 中的函数