十六进制转十进制| 16进制转10进制 | 在线进制转换 https://www.sojson.com/hexconvert/16to10.html
编码、字符集、文件类型、转义 - 知乎 https://zhuanlan.zhihu.com/p/22450223
HTML转义字符对照表 http://tool.oschina.net/commons?type=2
1、Python编程环境
Python编程环境(0)——(Anaconda+Qt+PyQt+Eric6及Eclipse+PyDev) - https://blog.csdn.net/sjpljr/article/details/79302914
2、Python编程基础
2.1 eric6中python脚本编辑基础 - https://blog.csdn.net/sjpljr/article/details/79324891
介绍eric6中Python脚本的基本架构及用法
2.2 Python的字符串编码(乱码问题整理)
Python2和Python3在字符串编码上的区别
https://www.cnblogs.com/geekard/archive/2012/10/04/python-string-endec.html
- 在Python2中,字符串字面量对应于8位的字符或面向字节编码的字节字面量。这些字符串的一个重要限制是它们无法完全地支持国际字符集和Unicode编码。为了解决这种限制,Python2对Unicode数据使用了单独的字符串类型。要输入Unicode字符串字面量,要在第一个引号前加上前最'u'。
- Python2中还有一种称为字节字面量的字符串类型,它是指一个已经编码的字符串字面量,在Python2中字节字面量和普通字符串没有差别,因为在Python2中普通字符串实际上就是已经编码(非Unicode)的字节字符串。
- 在Python3中,不必加入这个前缀字符,否则是语法错误,这是因为所有的字符串默认已经是Unicode编码了。如果使用-U选项运行解释器,Python2会模拟这种行为(即所有字符串字面量将被作为Unicode字符对待,u前缀可以省略)。在Python3中,字节字面量变成了与普通字符串不同的类型。
字符串字面量(stringliteral)是指双引号引住的一系列字符。字面量作为一种通用的,跨平台的数据交换格式,在程序界是公认的事实。在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数、浮点数以及字符串;而有很多也对布尔类型和字符类型的值也支持字面量表示;还有一些甚至对枚举类型的元素以及像数组、记录和对象等复合类型的值也支持字面量表示法。
如:在python中输入: >>> '张俊' ,python2 会自动将字符串转换为合适编码的字节字符串:'\xd5\xc5\xbf\xa1'
显式指定字符串类型为unicode类型:>>> u'张俊',enter后输出:u'\u5f20\u4fca',此类型字符串没有编码,保存的是字符在unicode字符集中的代码点(序号)。
>>> '张俊'.encode('utf-8') #python2 已经自动将其转化为utf-8类型编码,因此再次编码(python2会将该字符串当作用ascii或unicode编码过)会出现错误。
Python字符编码详解 - AstralWind - 博客园 https://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html
python - Send email to exchange with attachment in russian file name - Stack Overflow https://stackoverflow.com/questions/13646202/send-email-to-exchange-with-attachment-in-russian-file-name
>>> '张俊'.decode('utf-8') #python2 可以正常解码,返回的字符串类是无编码的unicode类型:u'\u5f20\u4fca'
>>> b'张俊' # ‘张俊' 已被python2转换为utf-8编码,因此已为字节字符串:'\xe5\xbc\xa0\xe4\xbf\x8a'
在python3.6中:
ab="张俊.xls"
ab1=ab.encode('utf-8')
ab2=ab1.decode('utf-8')
print("aaaa", "ab:",ab,type(ab), "ab1:", ab1, type(ab1), "ab2:", ab2, type(ab2))
输出结果:
ab: 张俊.xls <class 'str'>
ab1: b'\xe5\xbc\xa0\xe4\xbf\x8a.xls' <class 'bytes'>
ab2: 张俊.xls <class 'str'>
\xyy,十六进制数,yy代表的字符,例如:\x0a代表换行
\oyy,八进制数,yy代表的字符,例如:\o12代表换行
Unicode 字符串
在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。
在Python3中,所有的字符串都是Unicode字符串。
Python 字符串前面加u,r,b的含义
1、字符串前加 u
例:u"我是含有中文字符组成的字符串。"
作用:后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
2、字符串前加 r
例:r"\n\n\n\n” # 表示一个普通生字符串 \n\n\n\n,而不表示换行了。
作用:声明后面的字符串是普通字符,而不是特殊字符。
(特殊字符:即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。 )
应用:常用于正则表达式,对应着re模块。
3、字符串前加 b
例: response = b'<h1>Hello World!</h1>' # b' ' 表示这是一个 bytes 对象
作用:b" "前缀表示:后面字符串是bytes 类型。
用处:
网络编程中,服务器和浏览器只认bytes 类型数据。
如:send 函数的参数和 recv 函数的返回值都是 bytes 类型
附:
在 Python3 中,bytes 和 str 的互相转换方式是
str.encode('utf-8')
bytes.decode('utf-8')
完美解决Python2操作中文名文件乱码的问题
Python2默认是不支持中文的,一般我们在程序的开头加上#-*-coding:utf-8-*-来解决这个问题,但是在我用open()方法打开文件时,中文名字却显示成了乱码。我先给大家说说Python中的编码问题,Python中的字符串的大概分为为str和Unicode两种形式,其中str常用的编码类型为utf-8,gb2312,gbk等等,Python使用Unicode作为编码的基础类型。str记录的是字节数组,只是某种编码的存储格式,终于输出到文件或是打印出来是什么格式,完全取决于其解码的编码将他解码成什么样子;Unicode是一种类似于符号集的抽象编码,它只规定了符号的二进制代码,却没有规定这个二进制代码该如何存储,也就是它只是一种内部表示,不能直接保存,所以存储时需要规定一种存储形式,比如utf-8等。
Python中有编码转换的函数有:decode(char_set) 实现char_set解码成Unicode,encode(char_set) 实现Unicode编码成char_set,查看Python文档会发现:
open(filename, 'w')这个方法中,filename这个参数必须是Unicode编码的参数。
我之前加上#-*-coding:utf-8-*-将编码设置为utf-8,当调用这个方法往里传参数时,需要将这个变量filename解码成Unicode。
比如filename='中文.txt',使用open()时,这样写open(filename.decode('utf-8'), 'w'),这样创建的中文文件名就没有乱码问题了。