Python编码错误咨询:未声明编码且含非UTF-8字符的解析与修复
搞定Python编码错误:非UTF-8字符未声明编码的问题
错误含义拆解
这个错误说白了就是Python读你的firstday.py文件时卡壳了——它在第4行发现了一个以\x85开头的字节,但它默认用UTF-8编码来解析文件,这个字节不符合UTF-8的规则,而且你也没提前告诉它这个文件用的是什么编码,所以它不知道怎么处理这个奇怪的字符,只能报错给你看。
为啥会出现这个问题?
大概率是你代码里的那个省略号…搞的鬼——这不是普通的三个点...,而是一个特殊的Unicode字符。如果你的文件保存时用的不是UTF-8编码(比如Windows系统常用的Windows-1252),这个字符就会被转换成\x85这样的字节。而Python默认会以UTF-8来读取.py文件,当它遇到这个不符合UTF-8规则的字节时,就会抛出这个编码错误。
另外,也有可能是你从其他地方复制粘贴代码时,不小心带进来了一些不可见的特殊空白字符,这些字符的编码也不是UTF-8。
两种修复方案任你选
方案1:给文件加编码声明
在你的Python文件第一行加上编码声明,告诉Python这个文件用的是什么编码。比如如果你的文件是用Windows-1252保存的,就加:
# coding=windows-1252
这样Python就会用指定的编码来读取文件,自然就能解析那个特殊字符了。
方案2:替换特殊字符并保存为UTF-8
把那个特殊的省略号…换成普通的三个点...,然后把文件保存为UTF-8编码(几乎所有代码编辑器都能设置,比如VS Code右下角可以选编码,PyCharm在保存时也能指定)。修复后的代码长这样:
# -*- coding: utf-8 -*- year = eval(input("Enter the year: ")) day = (1+5*((year-1)%4)+4*((year-1)%100)+6*((year-1)%400))%7 print("The 1st of January",year,"falls on day",day,end = " ") print("of the week(0=Sun,...,6=Sat).")
这里第一行的# -*- coding: utf-8 -*-是可选的,但加上它能明确告诉Python文件编码,避免后续再出问题。
内容的提问来源于stack exchange,提问作者James Van Heerden
相关产品推荐
相关产品推荐

