Python编程问题——中文字符无法被识别,SyntaxError: Non-ASCII character ‘\xe5‘ in file 20.valid_parentheses.py on lin

1. 问题描述

在运行Python代码时出现以下问题:

SyntaxError: Non-ASCII character ‘\xe5’ in file 20.valid_parentheses.py on line 29, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

2. 问题产生原因

这个问题产生的原因:通常是Python2的编译器无法识别中文字符。

在Python2中,文字的默认编码方式是ASCII码,这对亚洲等语言非常不友好,注释难以编码。

在Python3中,文字的默认编码方式是Unicode,采用的传输格式是utf-8。

3. 解决方法

在Python文件的第一行或第二行添加(必须是在源文件的第一行或者第二行)

	# -*- coding:utf-8 -*-

这个写法有多种方式,最好使用这一种,这是PEP-0263的建议,因为Emacs等编辑器使用这种方式进行编码声明。

当然,最根本的方法就是直接使用Python3的编译器。Python3在Python2的基础上做了很大改动,更加的好用,建议尽量使用Python3。

4. 知识扩展
  • 字符集
    计算机只能识别0和1,如果想要显示人类能够轻松易读的符号,或者将人能轻松读出的符号让计算机理解,就需要我们将0、1和人类易读符号进行互相转换。
    字符集就是用来做这种转换的规则。常用的有ASCII编码,UNICODE编码等很多其他编码。

  • ASCII编码
    ASCII编码最早是美国用的,后来国际化了之后为了兼容其它语言文字做了扩展,这个应该是大家熟知的。
    ASCII编码表:
    在这里插入图片描述

  • UNICODE编码
    ASCII码无法兼容所有的语言,这是由其编码的位数决定的,8位难以表示所有字符,尤其是汉字。所以很多国家开始研究自己的字符集,包括我国的GB2312、GBK、GB18030。这导致一个问题:每个国家用自己的字符集,那么在进行交流的时候总是需要做字符集的转换。

    这个时候ISO(国际标准化组织)出面制定了UNICODE编码,统一采用16位进行编码,编码空间很大;兼容ASCII码,对于其他的编码全部没有提供兼容。这个编码方案的全名是Universal Multiple-Octet Coded Character Set,简称UCS,俗称UNICODE。

  • UTF传输格式
    UTF全称是UCS Transfer Format,是UNICODE代码点(code point)的实际表示方式。按照其基本长度占用的位数分为UTF-8/16/32。

    尽管UNICODE提供了16位的编码空间,但是仍然不能包含历史上所有的文字,也不能解决传输的问题。所以UNICODE用一些基本的保留字符制定了三套编码方式:UTF-8、UTF-16、UTF-32。

    在讨论UNICODE时,搞清楚编码方式非常重要。

    UTF-8
    以8位序列编码,用一个或几个字节来表示一个字符。可以兼容ASCII编码作为它的一部分。它是变长编码,是压缩的Unicode编码方式,可以节省空间。
    UTF-16
    UNICODE通常是指UTF-16。它的长度相对固定,不超出范围时用两个字节表示,超出之后用四个字节表示。按照高低位字节顺序,又分为UTF-16BE/UTF-16LE。
    UTF-32
    长度始终固定,每个Unicode代码点用4字节表示,按照高低位字节顺序又分为UTF-32BE/UTF-32LE。

    以UTF-8为例,在传输一个字符时,每次传输8位数据。但是要注意的是,为了保证安全,在传输时UNICODE到UTF是通过一定的算法转换的,并不是直接对应。

    UTF-8使用多的原因是:第一,可以容纳所有字符,兼容ASCII码;第二,UTF-8是变长的,更加节省空间。

更多关于Unicode的信息可以参考wikiUnicode官网介绍

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值