Python中使用‘ß’(尖锐S)时崩溃及编码报错问题问询
解决Python中SyntaxError: Non-ASCII字符的问题
这个问题我之前也碰到过!本质是Python 2默认把源码当成ASCII编码来解析,哪怕你把带ß的代码注释掉了,只要文件里存在任何非ASCII字符(包括注释里的),它在解析源码的时候就会直接抛出SyntaxError——根本轮不到你后面的sys.setdefaultencoding或者decode代码生效,因为错误发生在代码运行之前的源码解析阶段。
下面给你几个靠谱的解决办法:
1. 在源码开头添加编码声明(最推荐)
在你的.py文件最顶部(如果文件第一行是#!/usr/bin/env python这种shebang,就放在第二行)加上编码声明:
# -*- coding: utf-8 -*-
或者更简洁的写法也可以:
# coding=utf-8
这样Python就会明确以UTF-8编码解析整个源码文件,不管你是在代码里直接写ß,还是注释里有非ASCII字符,都能正常识别,从根源解决这个问题。
2. 用Unicode转义替代直接写非ASCII字符
如果不想加编码声明,你可以把代码里的ß换成对应的Unicode转义序列\u00df。比如原来的正则表达式如果是re.search(r'ß', content),改成:
re.search(r'\u00df', content)
这样源码里就没有非ASCII字符了,Python 2解析的时候就不会报错。
为什么之前的方法没用?
你之前用的sys.setdefaultencoding('utf8')和html.decode("utf-8")都是运行时处理字符串编码的手段,它们负责的是程序运行过程中字符串的编码转换,但这次的错误是源码解析阶段的语法错误,程序还没开始运行就卡壳了,所以那些方法根本没机会发挥作用。
内容的提问来源于stack exchange,提问作者chujudzvin
相关产品推荐
相关产品推荐

