Windows下Python运行面临一个比较常见的问题——中文乱码
通常为了Python.exe文件解析*.py的时候能正常识别中文,会在文件头指定一下coding,如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
第一行,Linux/Unix下的Shell文件标准写法,用于告诉OS用什么解释器解释文件
第二行,指定文件编码为UTF-8
但coding只告诉了解释器运行的脚本文件的编码,代码中读取文件中的中文还是会乱码,看一下如下代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
FILE_ATTR = {
"NAME": "文件名称",
"VERSION": "1.0.0",
"AUTHOR": "ICE π",
"DATE": "20220128",
"DESCRIPTION": "功能说明"
}
import os, sys
def print_hi():
# 在下面的代码行中使用断点来调试脚本。
filename = sys.path[0] + os.path.sep + "test.py"
with open(filename, "r")as f_socket:
for line in f_socket.read().splitlines():
print(line)
# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
print_hi()
有问题吗?正常来说,没啥问题,但运行结果如下:
这显然不是我们要的结果,下面我们略微改变一下代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
FILE_ATTR = {
"NAME": "文件名称",
"VERSION": "1.0.0",
"AUTHOR": "ICE π",
"DATE": "20220128",
"DESCRIPTION": "功能说明"
}
import os, sys
def print_hi():
# 在下面的代码行中使用断点来调试脚本。
filename = sys.path[0] + os.path.sep + "test.py"
with open(filename, "r", encoding="UTF-8")as f_socket:
for line in f_socket.read().splitlines():
print(line)
# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
print_hi()
注意第17行,在Open文件的时候指定了文件的编码,结果如下:
其实,我还尝试过在18行的line变更为line.encode("utf-8")结果同样不是我想要的,而且还把line变量的内容变成了单字节数据,结果如下:
每行前面的b是单字节类型数据的标识。按道理是可以转换过来,但还是没上面的方法来的规整,便捷
具体可以参考:Python字符串开头的b"、u"、r"与中文乱码 - 简书 (jianshu.com)
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论