Python3终端Unicode打印异常、float转换报错及默认编码验证问题
问题解答
异常字符未在终端完整显示的原因
你遇到的F CFA 20是典型的编码错配导致的乱码:原始内容是西非法郎的货币标识F CFA 20,读取Excel文件时用错误编码(如Latin-1)解码了原本UTF-8编码的内容,就会出现这类乱码。
终端没有显示全部异常字符的原因有两点:
- 终端字符集限制:如果终端的默认字符集不是UTF-8,无法识别的不可打印字符(比如你报错里的
\u202f窄不换行空格、\u00a0非换行空格)会被自动过滤或渲染为空白,不会显示对应的转义标识。 - Python打印逻辑的差异:直接使用
print(字符串)时,Python会调用str()方法处理输出,会尽可能将可渲染的Unicode字符转换为字形展示,不可见字符直接显示为空白;只有调用print(repr(字符串))时,才会输出完整的转义编码内容,你可以用这个方法查看VALUE字段的完整原始字符。
验证Python3默认UTF-8编码的方法
可以通过以下几个命令验证:
- 查看系统默认编码:
Python3版本默认输出为import sys print(sys.getdefaultencoding())utf-8。 - 查看标准输入输出的编码:
终端字符集配置正常的情况下,输出均为import sys print(sys.stdin.encoding) print(sys.stdout.encoding)utf-8。 - 手动验证编码转换逻辑:
输出的字节序列符合UTF-8编码规则即可确认编码配置正常。# 测试非ASCII字符的UTF-8编码结果 print("法属西非法郎".encode())
额外转换报错修复建议
你将VALUE字段转float失败的原因是字符串中存在大量非数字字符,可以先通过正则过滤掉所有非数字、小数点的内容后再转换:
df_price_all['VALUE'] = df_price_all['VALUE'].str.replace(r'[^0-9.]', '', regex=True).astype(float)
内容的提问来源于stack exchange,提问作者Azima
相关产品推荐
相关产品推荐

