首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python3.6.1输出文件中的Unicode符号

Python3.6.1输出文件中的Unicode符号
EN

Stack Overflow用户
提问于 2017-04-28 13:05:01
回答 1查看 400关注 0票数 1

我需要记录到log.txt的连接错误。窗户是俄国人。我的代码:

代码语言:javascript
运行
复制
    # e is a name for "requests.ConnectionError" form Windows if server is not avilable
    # I take error and cut from it text I need and convert it to str
    e_warning = str(e.args[0].reason)
    # I search text I need in string with "re"
    e_lst = re.findall('>:\s(.+)', e_warning)
    # I create string again from list "re" gives me
    e_str = ''.join(e_lst)
    # I Convert string to bytes
    e_str_unicode = codecs.encode(e_str, 'utf-8')
    # It is a message to warning window
    e_str_utf = codecs.decode(e_str_unicode, encoding='utf-8')
    messagebox.showerror(title='Connection error', message=e_str)
        with codecs.open('log.txt', 'a', encoding='utf-8') as log:
        log.write(strftime(str("%H:%M:%S %Y-%m-%d") + str(e_str_unicode) + '\n'))

如果我在最后一行中使用"e_str_utf“,它会给我:

代码语言:javascript
运行
复制
UnicodeEncodeError: 'locale' codec can't encode character '\u041f' in position 72: Illegal byte sequence

说得通- 72是第一个俄文字母。如果在最后一行中使用"e_str_unicode“,则没有错误,但在日志文件中我看到:

代码语言:javascript
运行
复制
15:25:18 2017-04-28b'Failed to establish a new connection: [WinError 10060] \xd0\x9f\xd0\xbe\xd0\xbf\xd1\x8b\xd1\x82\xd0\xba\xd0\xb0 \xd1\x83\xd1\x81\xd1\x82\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb8\xd1\x82\xd1\x8c \xd1\x81\xd0\xbe\xd0\xb5\xd0\xb4\xd0\xb8\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb1\xd1\x8b\xd0\xbb\xd0\xb0 \xd0\xb1\xd0\xb5\xd0\xb7\xd1\x83\xd1\x81\xd0\xbf\xd0\xb5\xd1\x88\xd0\xbd\xd0\xbe\xd0\xb9, \xd1\x82.\xd0\xba. \xd0\xbe\xd1\x82 \xd0\xb4\xd1\x80\xd1\x83\xd0\xb3\xd0\xbe\xd0\xb3\xd0\xbe \xd0\xba\xd0\xbe\xd0\xbc\xd0\xbf\xd1\x8c\xd1\x8e\xd1\x82\xd0\xb5\xd1\x80\xd0\xb0 \xd0\xb7\xd0\xb0 \xd1\x82\xd1\x80\xd0\xb5\xd0\xb1\xd1\x83\xd0\xb5\xd0\xbc\xd0\xbe\xd0\xb5 \xd0\xb2\xd1\x80\xd0\xb5\xd0\xbc\xd1\x8f \xd0\xbd\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x83\xd1\x87\xd0\xb5\xd0\xbd \xd0\xbd\xd1\x83\xd0\xb6\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xbe\xd1\x82\xd0\xba\xd0\xbb\xd0\xb8\xd0\xba, \xd0\xb8\xd0\xbb\xd0\xb8 \xd0\xb1\xd1\x8b\xd0\xbb\xd0\xbe \xd1\x80\xd0\xb0\xd0\xb7\xd0\xbe\xd1\x80\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xbe \xd1\x83\xd0\xb6\xd0\xb5 \xd1\x83\xd1\x81\xd1\x82\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xbd\xd0\xbe\xd0\xb5 \xd1\x81\xd0\xbe\xd0\xb5\xd0\xb4\xd0\xb8\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb8\xd0\xb7-\xd0\xb7\xd0\xb0 \xd0\xbd\xd0\xb5\xd0\xb2\xd0\xb5\xd1\x80\xd0\xbd\xd0\xbe\xd0\xb3\xd0\xbe \xd0\xbe\xd1\x82\xd0\xba\xd0\xbb\xd0\xb8\xd0\xba\xd0\xb0 \xd1\x83\xd0\xb6\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xba\xd0\xbb\xd1\x8e\xd1\x87\xd0\xb5\xd0\xbd\xd0\xbd\xd0\xbe\xd0\xb3\xd0\xbe \xd0\xba\xd0\xbe\xd0\xbc\xd0\xbf\xd1\x8c\xd1\x8e\xd1\x82\xd0\xb5\xd1\x80\xd0\xb0'

中的编码=‘utf-8’

代码语言:javascript
运行
复制
with codecs.open('log.txt', 'a', encoding='utf-8') as log:

应该将UNICODE字节保存在我的文件中的utf-8代码中,但由于某些原因,它忽略了编码设置.为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-28 13:39:19

首先:什么是编解码器codecs.open('log.txt', 'a', encoding='utf-8')

第二:这是不对的,strftime(str("%H:%M:%S %Y-%m-%d") + str(e_str_unicode) + '\n'),应该是strftime("%H:%M:%S %Y-%m-%d") + e_str_unicode + '\n'

这是一个简单的例子,说明如何做到这一点:

代码语言:javascript
运行
复制
from time import strftime
text = input()
print(text)

with open('log.text', 'a', encoding='utf-8') as log:
    message = strftime("%H:%M:%S %Y-%m-%d") + '=>' + text + '\n'
    log.write(message)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43680956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档