python中的编码问题

刚学python,老是出现写了中文都出现错误:SystaxError :Non-Asc|| charactor '\xe8' in file

下面是自己整理的一些案例:


(1)出现中文需要的解决方法

#!/usr/bin/python
# -*- coding: latin-1 -*-

t =raw_input(’请输入一串数字‘)




理解:

 #!/usr/bin/python    是表明该脚本是属于python 的,即指出了python 这个程序的路径,用来运行python程序

 # -*- coding: latin-1 -*-   用于指定脚本用的是哪种编码,此处表达的是用拉丁文的编码方式

拓展:文件的编码方式

1,python默认以ASC11编码方式
2,编码声明必须在文件的第一行和第二行,并且用‘#’开头,以字符串的形式

多种编码方式的声明:
	#_*_ coding: latin-1 _*_     #_*_ coding: iso-8859-15 _*_     #_*_ coding:ASCII _*_

	#coding: latin-1

 	#This python file uses the following encoding: utf-8

	#coding=latin-1





多种编码方式的介绍:(摘录)
	
  • GB2312

      GB2312是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集——基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。GB2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。GB2312 规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。

      GB2312的编码范围为2121H-777EH,与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别。

  • GBK

      GB2312 仅收汉字 6763 个,这大大少于现有汉字,随着时间推移及汉字文化的不断延伸推广,有些原来很少用的字,现在变成了常用字,例如:朱镕基的“镕”字,未收入 GB2312-80,现在报业出刊只得使用(金+容)、(金容)、(左金右容)等来表示,形式不一而同,这使得表示、存储、输入、处理都非常不方便,而且这种表示没有统一标准。为了解决这些问题,以及配合UNICODE的实施,全国信息技术化技术委员会于1995年12月1日《汉字内码扩展规范》。GBK向下与GB2312 完全兼容,向上支持ISO 10646 国际标准,在前者向后者过渡过程中起到的承上启下的作用。GBK亦采用双字节表示,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1,总体编码范围为8140-FEFE之间,首字节在81-FE 之间,尾字节在40-FE 之间,剔除 XX7F 一条线
GBK 共收入21886个汉字和图形符号,包括:
    * GB2312中的全部汉字、非汉字符号;
    * BIG5中的全部汉字;
    * 与ISO 10646相应的国家标准GB13000中的其它 CJK 汉字,以上合计20902个汉字;
    * 其它汉字、部首、符号,共计984个;

  • GB18030

      GB18030 是最新的汉字编码字符集的国家标准,向下兼容 GBK 和 GB2312 标准。GB18030 编码是一二四字节变长编码。一字节部分从 0x0~0x7F 与 ASCII 编码兼容。二字节部分,首字节从 0x81~0xFE,尾字节从 0x40~0x7E以及 0x80~0xFE,与GBK标准基本兼容。四字节部分,第一字节从 0x81~0xFE,第二字节从 0x30~0x39,第三和第四字节的范围和前两个字节分别相同。四字节部分覆盖了从 0x0080 开始, 除去二字节部分已经覆盖的所有 Unicode 3.1码位。也就是说,GB18030编码在码位空间上做到了与Unicode标准一一对应,这一点与UTF-8编码类似。

  • Unicode

      Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符。Unicode只是一个符号集, 它只规定了符号的二进制代码, 却没有规定这个二进制代码应该如何存储。比如UTF-8、UTF-16、UTF-32都是Unicode编码的实现方式,不过UTF-8是使用最多的实现。

  • UTF-8

      UTF-8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,是在互联网上使用最广的一种unicode的实现方式。UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,因此可以节省存储空间。它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。

     UTF-8的编码规则很简单,只有二条:

            1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的;
            2)对于n字节的符号,第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的二进制位,表示为这个符号的unicode码;

      另外像ASCII只用于英文字符编码,BIG5编码是通行于台湾、香港地区的一个繁体字编码方案,虽然存在一些瑕疵,但广泛应用于电脑行业,尤其是互联网中,从而成为一种事实上的行业标准。

  • 总结
  1. ASCII用于表示英文字符,是用7位表示的,能表示128个字符;其扩展使用8位表示,表示256个字符;
  2. GB2312简体中文的编码格式, 只支持6763个常用汉字;
  3. GBK是GB2312基础上扩容后兼容GB2312的标准,包含全部中文字符,支持简体中文及繁体中文;
  4. GBK通用性比UTF8差,不过UTF8占用的数据库比GBK大;
  5. GB2312、GBK到GB18030都属于双字节字符集 (DBCS);
  6. 从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0;

你可能感兴趣的:(python,学习)