编码/解码C字符串文字

时间:2014-11-04 10:52:03

标签: python replace escaping cstring

我有一个文本文件,其中包含的行为类似于C字符串。例如:

something = "some text\nin two lines\tand tab";
somethingElse = "some text with \"quotes\"";

在引号之间取物不是问题。问题是,以后我处理这个字符串和斜线转义会使这很难。

我想解码这些字符串,处理它们,然后将它们编码回C字符串文字。

所以从那个原始输入

some text\\with line wrap\nand \"quote\"

我需要:

some text\with line wrap
and "quote"

反之亦然。

我尝试了什么

我找到some API来处理Python string literalsstring_escape),它接近我需要的,但是因为我处理C字符串,所以无用。我试过找其他编解码器来匹配我的问题,但到目前为止还没有运气。

1 个答案:

答案 0 :(得分:0)

我也在寻找一个简单的解决方案,而json模块似乎是最简单的解决方案。以下是我的快速技巧。请注意,如果/当两者都在同一字符串中出现单引号(')和双引号(“)时,仍然存在问题... 并且我怀疑您会遇到问题带有Unicode字符...

def c_decode(in_str:str) -> str:
    return json.loads(in_str.join('""' if '"' not in in_str else "''"))

def c_encode(in_str:str) -> str:
    """ Encode a string literal as per C"""
    return json.dumps(in_str)[1:-1]

还要注意,如果in_str"AB\n\r\tYZ" ...

then we alternatively have: ("%r"%(in_str.join('""')))[2:-2]
giving: 'AB\\n\\r\\tYZ' # almost the same c_encode above. 

在这里希望某人有更好的解决方案。