又是 py2 的 UnicodeEncodeError 问题

2015-05-14 19:19:23 +08:00
 tabris17
现在问题出在第三方的库里,里面有类似 '{0}'.format(string) 的语句,而string是我传入的unicode。

这么一来就UnicodeEncodeError了。

现在的问题是如果在不修改第三方库源代码的情况下,使得代码可以支持中文。

reload(sys) 什么的就算了
2158 次点击
所在节点    Python
4 条回复
messense
2015-05-14 19:23:53 +08:00
In [1]: def func(s):
...: return '{0}'.format(s)
...:

In [2]: func('123')
Out[2]: '123'

In [3]: func(u'呵呵')
---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last)
<ipython-input-3-f4d18df38e04> in <module>()
----> 1 func(u'呵呵')

<ipython-input-1-62fe9e7b06ab> in func(s)
1 def func(s):
----> 2 return '{0}'.format(s)
3

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

In [4]: func(u'呵呵'.encode('utf-8'))
Out[4]: '\xe5\x91\xb5\xe5\x91\xb5'
gamexg
2015-05-14 20:55:54 +08:00
重写format?
imn1
2015-05-14 21:43:54 +08:00
In [5]: u'{0}'.format(u'中文')
Out[5]: u'\u4e2d\u6587'
Sylv
2015-05-15 02:59:44 +08:00
这是这个库没考虑到 Unicode 的情况。
最根本的方法是修改库的源码,给前面加个 u,还可以给作者发个 PR。
如果不想改人家源码的话,只好先将 string.encode('utf-8') 后再传入第三方的库方法。
其实 Python 2 自带的库有些方法也不支持 Unicode。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/191123

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX