报错案例
情况下我想用 Python 写一个统计记事本中文字数的脚本,然后直接在windows控制台输出,但当写好代码运行时发现控制台中文报错
# -*- coding: UTF-8 -*-
print("中文测试")
上述代码使用 Python 常用 Phchrm 运行时是没有问题,运行结果如下:
但当时同样的代码在使用了 Windows 控制台运行是直接报错如下:
于是我就在各个搜索引擎寻找答案,给出的答案如下:
- Windows 控制台不支持 utf-8 ,使用 GBK 但有些字符 GBK 无法表示,导致 print 函数无法解码读取的时候用 utf-8 ,更改标准输出编码为 gb18030 。试了更换后直接中文乱码了倒是不报错了,还是不能显示中文,不排除这种可能。
- windows 下控制台编码,使用 CHCP 命令更改活动代码页编号。输入CHCP,回车;(显示为936,也就是当前页码,代表当前使用的是简体中文(GB2312)编码),输入CHCP 65001,回车;(指定为utf-8)。以下为更换截图
更换后,更换命令 CHCP 65001。
上述目的就是说 Windows 控制台编码格式的默认属性是 gbk ,所以更换为 utf -8 编码格式。
结果还是不行,当然不排除这种可能 - 当我们创建 .py 文件时,我是直接把创建了一个 txt 文本,然后在更改后缀名为 py文件。这样就涉及一个问题,Windows 文本文件直接默认的编码格式为 ANSI ,导致在解码 utf-8 文件时就是报上面的错误,就是中文报错或乱码问题。截图如下
更改为如下图。
然后就可以直接运行了,运行截图如下:
到此我遇见的报错就可以就是目前的解决方案。我推荐先使用第三种先查看文件字符编码集,如果是
ANSI 就先更改 utf-8 格式。不行再试下其他方案。更改方案为:记事本—>文件—>另存为。就可以看到上面的界面,然后直接更改就好了。
下面是我截取其他大佬统计记事本中文字数的代码,以作记录。代码如下
# -*- coding: UTF-8 -*-
from sys import argv
def statistics(file_name):
with open(file_name, 'r',encoding='utf-8') as f:
list_f = [line.strip('\n') for line in f]
cols=[] # 创建一个空的列表
for line in list_f:
list_split = line.split() # 对列表进行切片
list_str = ''.join(list_split) #
cols.append(list_str)
return '统计文件中的字符个数为:{}'.format(len(''.join(cols)))
def TryOut():
print("getAriticles.try()")
if __name__ == '__main__':
file_name = argv[1]
print(statistics(file_name))
将上述代码保存在 .py 文件中,然后代开 PowerShell 窗口运行命令:python m.py “c.txt”
运行结果如上图。当然如果不想有那么多问题可以直接在开发工具如 Pychrm 中直接运行终端也是可以的。结果如图
注意:以上运行是 txt 文件与 py 文件处于同意目录文件中。如果不是则需要 txt 文件绝对路径才能运行,望知悉。
记录这个案例的原因主要是花费了将近一个多小时才解决掉。最后发现是如此简单的一个细节问题导致的,不过如果是用 idle 直接创建的 py 文件编码格式就没问题了。
最后总结
细节决定一切,保持耐心,这将不是问题。感谢阅读至此,不急走的话可以帮忙点个小小的赞或点点关注,以至于点点关注不迷路,以后有更多分享可以助力愉快开发。