python c_char_p字符串反斜杠\x在str类型中 无法转义的解决

网上相关的问题有人问:http://zhidao.baidu.com/question/560710361.html

python c_char_p字符串反斜杠\x在str类型中 无法转义的解决

>>>strPcsData = c_char_p('keyword:1\xe5\x93\x88\xe5\x93\x88;')

>>>print "keyword_list:%s"%strPcsData

keyword_list:c_char_p('keyword:1\xe5\x93\x88\xe5\x93\x88;')

>>>foo = str(strPcsData).decode('utf-8')

>>>print "keyword_list:%s"%foo

keyword_list:c_char_p('keyword:1\xe5\x93\x88\xe5\x93\x88;')

>>>strPcsData = strPcsData.split("keyword")[1:]

>>>print "keyword_list 2:%s"%strPcsData[0]

keyword_list 2:[":1\\xe5\\x93\\x88\\xe5\\x93\\x88;')"]

>>> print str(strPcsData.value).decode('utf-8')
keyword:1哈哈;

以上代码表明在split或者取列表的时候,引入了双反斜杠的错误。导致后面对字符串的中文显示失败。

经过搜索,发现是用法的问题,因为 c_char_p以 foo=str(strPcsData) 方式赋值给某str对象时foo内实际存储的还是c_char_p类型(c_char_p('keyword:1\xe5\x93\x88\xe5\x93\x88;')),所以foo.decode('utf-8')后,即使指定了正确的解码方式,显示结果也不是期望的中文。如果在此基础上进行split()操作获得列表,foo的内容里面的"\x"会自动被解析为“可见字符\\x”而非“转义字符\x”。

其实对c_char_p 内容的正确解析方法是用.value取值:

>>> print str(strPcsData.value).decode('utf-8')
keyword:1哈哈;

本人文章除注明转载外,均为本人原创或编译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区
转载请注明:文章转载自:开源中国社区 [http://my.oschina.net/kjpioo/blog/]
本文标题:《python c_char_p字符串反斜杠\x在str类型中 无法转义的解决》
本文地址:http://my.oschina.net/kjpioo/blog/152260

转载于:https://my.oschina.net/kjpioo/blog/152260