当我运行我的代码时,我得到这个错误:
UserId = "{}".format(source[1]) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
我的代码是:
def view_menu(type, source, parameters):
ADMINFILE = 'static/users.txt'
fp = open(ADMINFILE, 'r')
users = ast.literal_eval(fp.read())
if not parameters:
if not source[1] in users:
UserId = "{}".format(source[1])
users.append(UserId)
write_file(ADMINFILE,str(users))
fp.close()
reply(type, source, u"test")
else:
reply(type, source, u"test")
register_command_handler(view_menu, 'test', ['info','muc','all'], 0, '')
请告诉我如何才能解决这个问题。
谢谢
发布于 2014-08-03 10:11:45
问题是"{}"
是非Unicode str
,而您正试图将format
unicode
添加到其中。Python2.x通过使用sys.getdefaultencoding()
自动编码unicode
来处理这个问题,'ascii'
通常是ASCII码,但是有一些非ASCII码。
有两种方法可以解决这个问题:
unicode
。例如,如果它是UTF-8,那么执行"{}".format(source[1].encode('utf-8'))
.unicode
格式的字符串:u"{}".format(source[1])
。稍后您可能仍然需要encode
该UserId
;我不知道write_file
函数是如何工作的。但通常情况下,尽可能长时间地保留所有Unicode代码,只在最边缘进行编码和解码,要比试图混合和匹配两者要好得多。话虽如此,但这一行代码是无用的。"{}".format(foo)
将foo
转换为str
,然后将其格式化为完全相同的str
。为什么?
发布于 2014-11-11 05:56:29
在处理未知编码的字符串时,请使用以下函数:
你想处理文本吗?
def read_unicode(text, charset='utf-8'):
if isinstance(text, basestring):
if not isinstance(text, unicode):
text = unicode(obj, charset)
return text
例如,您想要将文本存储在数据库中,请使用以下命令:
def write_unicode(text, charset='utf-8'):
return text.encode(charset)
发布于 2014-08-05 08:13:54
一种解决方案是在sitecustomize.py中将默认编码设置为utf-8而不是ascii
https://stackoverflow.com/questions/25103575
复制