当我运行代码时,会出现以下错误:
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, '')
请告诉我怎样才能解决这个问题。
谢谢你
解决方案是在sitecommize.py中将默认编码设置为utf-8而不是ascii
Changing default encoding of Python?
在处理未知编码的字符串时,使用以下函数:
你想和文本一起工作吗?
要存储文本,例如在数据库中,请使用以下命令:
问题是
"{}"
是非Unicode的str
,而您正试图format
一个unicode
到其中。Python 2.x通过自动用sys.getdefaultencoding()
编码unicode
来处理这个问题,通常是'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
。为什么?相关问题 更多 >
编程相关推荐