Python编程——总目录

12 篇文章 0 订阅
10 篇文章 0 订阅

十六进制转十进制| 16进制转10进制 | 在线进制转换  https://www.sojson.com/hexconvert/16to10.html

编码、字符集、文件类型、转义 - 知乎  https://zhuanlan.zhihu.com/p/22450223

HTML转义字符对照表  http://tool.oschina.net/commons?type=2

字符集(Charcater Set)与字符编码(Encoding) - 莫干 - CSDN博客  https://blog.csdn.net/qq_20161893/article/details/72581449

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

  1. 在Python2中,字符串字面量对应于8位的字符或面向字节编码的字节字面量。这些字符串的一个重要限制是它们无法完全地支持国际字符集和Unicode编码。为了解决这种限制,Python2对Unicode数据使用了单独的字符串类型。要输入Unicode字符串字面量,要在第一个引号前加上前最'u'。
  2. Python2中还有一种称为字节字面量的字符串类型,它是指一个已经编码的字符串字面量,在Python2中字节字面量和普通字符串没有差别,因为在Python2中普通字符串实际上就是已经编码(非Unicode)的字节字符串。
  3. 在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'),这样创建的中文文件名就没有乱码问题了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值