求助:SyntaxError: Non-ASCII character错误修复,添加代码行无效
嘿,我之前也踩过这个编码的坑!明明加了# -*- coding: utf-8 -*-还是报错?别慌,咱们从这几个方向逐一排查:
编码声明的位置必须正确
Python只会识别脚本的第一行或第二行的编码声明。如果你的脚本第一行是shebang(比如#!/usr/bin/env python),那编码声明一定要放在第二行,不能往后挪。举个正确的例子:#!/usr/bin/env python # -*- coding: utf-8 -*-要是把声明放在第三行及以后,Python根本不会读取它,自然没用。
检查编码声明的拼写和符号
别小看细节!比如把utf-8写成utf8(虽然部分场景兼容,但标准写法是带横杠的utf-8),或者不小心用了中文的#、-符号,这些都会导致声明失效。一定要确保是纯英文符号。确认文件实际保存的编码
很多时候问题出在编辑器的保存设置上:你加了UTF-8声明,但编辑器悄悄把文件存成了GBK、UTF-16或者其他编码。打开你的编辑器(比如VS Code、PyCharm),看右下角的编码标识,点击后选择「通过编码保存」,明确选UTF-8格式。排查隐藏的非ASCII字符
有些看不见的特殊字符(比如全角空格、零宽空格、不可见的控制字符)会混在代码里,肉眼根本发现不了,但Python会检测到。你可以用这段代码打印脚本的字节形式,找出可疑行:with open('你的脚本文件名.py', 'rb') as f: for line_num, line_bytes in enumerate(f, 1): print(f"第{line_num}行: {repr(line_bytes)}")输出里如果有
\xXX(XX不是ASCII范围内的字节),那就是问题所在,删掉对应的字符就行。Python 2.x额外注意:字符串要加u前缀
如果你还在维护Python 2的代码,即使加了编码声明,直接写print("中文")也会报错,必须写成print(u"中文")(加u前缀表示Unicode字符串)。不过真心建议升级到Python 3,它默认支持UTF-8,大部分编码问题都会自动消失。检查导入的第三方模块
如果错误提示来自你导入的模块,那问题不在你的主脚本里。找到那个模块文件,按照上面的步骤检查它的编码声明和保存格式。
一般来说,按这个顺序排查,总能找到问题所在!
内容的提问来源于stack exchange,提问作者Cody

