飘逸的python - 编码杂症之在字符串前面加u
2013-08-08 08:21
288 查看
有时候我们从其它地方接受的字符串经过艰难跋涉,它变了个样。比如收到的是'\u6253\u602a\u8005'而不是u'\u6253\u602a\u8005'。
明明肉眼看起来只需要加个u,但是怎么加呢?
>>s = '\u6253\u602a\u8005'
>>s
'\\u6253\\u602a\\u8005'
>>'u'+s
'u\\u6253\\u602a\\u8005'
这样不行。
而且表面看起来是'\u6253\u602a\u8005',其实内部是'\\u6253\\u602a\\u8005',就是转义了反斜杠,有2个斜杠,而我要的是\u而不是\\u。
这时喜欢用黑魔法的可能会想到eval。
>>eval('u"'+s+'"')
u'\u6253\u602a\u8005'
>>print eval('u"'+s+'"')
打怪者
嗯,没错,用eval可以。不过这样实现太蛋疼了。
python就自带了解决方法。就是unicode-escape。
>>unicode(s,'unicode-escape')
u'\u6253\u602a\u8005'
另外,还有个跟unicode-escape齐名的东西,叫string-escape。它的作用可以说是“去掉转义,把2个反斜杠变成1个”。看例子。
>>s = 'hello\\nworld'
>>s
'hello\\nworld'
>>s.decode('string-escape')
'hello\nworld'
明明肉眼看起来只需要加个u,但是怎么加呢?
>>s = '\u6253\u602a\u8005'
>>s
'\\u6253\\u602a\\u8005'
>>'u'+s
'u\\u6253\\u602a\\u8005'
这样不行。
而且表面看起来是'\u6253\u602a\u8005',其实内部是'\\u6253\\u602a\\u8005',就是转义了反斜杠,有2个斜杠,而我要的是\u而不是\\u。
这时喜欢用黑魔法的可能会想到eval。
>>eval('u"'+s+'"')
u'\u6253\u602a\u8005'
>>print eval('u"'+s+'"')
打怪者
嗯,没错,用eval可以。不过这样实现太蛋疼了。
python就自带了解决方法。就是unicode-escape。
>>unicode(s,'unicode-escape')
u'\u6253\u602a\u8005'
另外,还有个跟unicode-escape齐名的东西,叫string-escape。它的作用可以说是“去掉转义,把2个反斜杠变成1个”。看例子。
>>s = 'hello\\nworld'
>>s
'hello\\nworld'
>>s.decode('string-escape')
'hello\nworld'
相关文章推荐
- 飘逸的python - 编码杂症之在字符串前面加u
- Python中文编码问题(字符串前面加'u')
- Python中文编码问题(字符串前面加'u')
- Python字符串的编码与解码(encode与decode)
- Python字符串编码的encode与decode
- Python 在字符串前面加'r'的用法
- python中文字符串的编码问题
- 关于python中的字符串编码理解
- 【Python】08、字符串格式化、编码及bytes、bytearray
- python学习之字符串前面加 r 的作用
- python字符串编码识别模块chardet简单应用
- Python字符串编码+MySQLdb中的中文字符问题
- 详解Python当中的字符串和编码
- python如何解析包含不同编码的字符串
- 【python】字符串编码问题
- 使用自己的Python函数处理Protobuf中的字符串编码
- python -- 字符串和编码
- python 字符串和编码常用函数
- Python中的字符串与字符编码:编码和转换问题
- python字符串编码判断