基本抄袭web.py的处理
模块有两个处理方法 s输出str,u输出unicode
r"""stropt provides operations for string and unicode operation.
This exports:
- stropt.s Converts any given object to utf-8 encoded string.
- stropt.u Converts any given object to unicode string.
"""
def s(obj, encoding='utf-8'):
r"""
Converts any given object to utf-8 encoded string.
>>> s('hello')
'hello'
>>> s(u'\u1234')
'\xe1\x88\xb4'
>>> s(2)
'2'
"""
if isinstance(obj, unicode):
return obj.encode(encoding)
elif isinstance(obj, str):
from chardet import detect
ec = detect(obj)['encoding']
if ec.lower()[:2] == 'gb' : ec = 'gb18030'
return obj.decode(ec).encode(encoding)
elif hasattr(obj, 'next'): # iterator
return itertools.imap(s, obj)
else:
return str(obj)
def u(obj, encoding='utf-8'):
r"""
Converts any given object to unicode string.
>>> u('hello')
u'hello'
>>> u(2)
u'2'
>>> u('\xe1\x88\xb4')
u'\u1234'
"""
t = type(obj)
if t is unicode:
return obj
elif t is str:
from chardet import detect
ec = detect(obj)['encoding']
if ec.lower()[:2] == 'gb' : ec = 'gb18030'
return obj.decode(ec)
elif t in [int, float, bool]:
return unicode(obj)
elif hasattr(obj, '__unicode__') or isinstance(obj, unicode):
return unicode(obj)
else:
return str(obj).decode(encoding)