python2编码的问题

时间:2022-10-25 18:34:46

1,python2的默认编码是ascii码。

2,python2中有2中数据模型来支持字符串这种数据类型,分别为str和unicode。

3,uncode转换为其他编码是encode,其他编码转换成unicode是decode(解码)。所以unicode是核心,比如你现在有个gbk的字符串,如果想要变成utf-8,那你需要先decode然后在encode才行。

python2编码的问题

4,文件开头声明的编码与定义str是有关系的。str有utf-8 gbk gb2312 ascaii等。

比如:

#!/usr/bin/env python
# *-*coding:utf-8 *-*
s = '中国'
print(type(s)) 结果:<type 'str'>

  可以发现s是一个字符串,但其实它的编码也是utf-8,因为开头的声明变量就是utf-8。

#!/usr/bin/env python
# *-*coding:utf-8 *-*
s = '中国'
print(type(s))
data = s.decode('utf-8')
print(data)
print(type(data)) 结果:
<type 'str'>
中国
<type 'unicode'>

 可以发现s.decode(‘utf-8’)就将s解码为unicode,这个时候data就可以编码为其他的格式了。

比如:

#!/usr/bin/env python
# *-*coding:utf-8 *-*
s = '中国'
print(type(s))
s_unicode = s.decode('utf-8')
s_gbk = s_unicode.encode('gbk')

 

上述结果会输出一个gbk编码的字符串,但是可能会显示乱码。这个取决于你的终端。如果你使用的是windows 的cmd窗口,默认是gbk的话,就会显示出来了,但是如果你使用的是linux的终端或者pycharm运行会乱码。

5,上面说到一点,python2默认使用的是ascii码作为默认编码,所以会有一个问题。如下:

python2编码的问题

这就纳闷了,我刚刚明明是编码,为啥会显示解码呢?就算是解码为啥会是ascii码呢?这个就和Python2么默认编码有关系了。

因为python2默认在我编码的时候用默认的ascii码给我解码,所以

s.encode('utf-8') 过程是 s.decode('ascii').encode('utf-8' ) ,而s没办法解码为unicode。因为它其实本质上是utf-8,所以这也就无法解码了,报错了。

这就是默认编码的尴尬之处。

6,文件操作

python2操作文件,会经常报错。。。。。。。。。这就是因为咱们没搞清楚。所以,下面就谈谈自己的粗浅想法。

操作文件,建议使用codecs这个模块,非常方便。codecs提供open方法,open()方法可以指定编码格式。

使用这个方法打开这个文件读取返回都是unicode。写入时,如果write参数是unicode。则使用打开文件时的编码写入,如果是str,则先使用默认编码解码成unicode后再以打开文件的编码写入

这里需要注意的是如果str是中文,而默认编码sys.getdefaultencoding()是ascii的话会报解码错误。

python2编码的问题

从上面可以发现默认打开文件,它会自动编码,如果没有指定编码,这个时候他用又得用默认编码,所以过程是s.encode('ascii') 所以这就不报错了吗?

所以写入的时候就指定编码就可以了。于是乎:

python2编码的问题

这样就可以避免报错了。

下面是读取,可以发现读取,是unicode编码。文件流.decode('utf-8')

python2编码的问题

上面作为自己的笔记,可能有错误哦。

python2编码的问题的更多相关文章

  1. python2编码总结(转)

    以下依次列出python2常遇到的几个问题及讲解. # -*- coding:utf-8 -*- python2默认以ASCII编码,但是在实际编码过程中,我们会用到很多中文,为了不使包含中文的程序报 ...

  2. &lbrack;python&rsqb;Python2编码问题

    以下内容说的都是 python 2.x 版本 简介 基本概念 Python "帮"你做的事情 推荐姿势 基本概念 我们看到的输入输出都是'字符'(characters),计算机(程 ...

  3. python2编码问题

    前言:python3解决了编码的问题,但python2还存在很多编码问题,用P2写爬虫爬了网页,解析时常有不同字符混着编码,导致解码问题成为爬虫程序员的噩梦... 但咱们要用robot framewo ...

  4. Python2 编码问题分析

    本文浅显易懂,绿色纯天然,手工制作,请放心阅读. 编码问题是一个很大很杂的话题,要向彻底的讲明白可以写一本书了.导致乱码的原因很多,系统平台.编程语言.多国语言.软件程序支持.用户选择等都可能导致无法 ...

  5. python3和python2编码拾遗

    py2编码 tr和unicode str和unicode都是basestring的子类.严格意义上说,str其实是字节串,它是unicode经过编码后的字节组成的序列.对UTF-8编码的str'苑'使 ...

  6. python2 编码问题详解

    实例对比 定义 type str unicode print encode('utf8') decode('utf8') encode('unicode-escape') encode('string ...

  7. python2 编码与解码

    #!coding: utf-8 s = "特斯拉" s_to_unicode = s.decode("utf-8") unicode_to_gbk = s_to ...

  8. 转 PYTHON2 编码处理-str与Unicode的区别

    https://www.cnblogs.com/long2015/p/4090824.html

  9. 从python2&comma;python3编码问题引伸出的通用编码原理解释

    今天使用python2编码时遇到这样一条异常UnicodeDecodeError: ‘ascii’ code can’t decode byte 0xef 发现是编码问题,但是平常在python3中几 ...

随机推荐

  1. HTML5 学习笔记(二)——HTML5新增属性与表单元素

    目录 一.HTML5新增属性 1.1.contextmenu 1.2.contentEditable 1.3.hidden 1.4.draggable 1.5.data-* 1.6.placehold ...

  2. MVC5 网站开发实践 2&period;2、管理员身份验证

    上次完成了管理员的登录,这次要解决对管理员登录后的验证,采用AuthorizeAttribute属性的方式.之前还要解决几个问题,然后才重写验证类,最后稍微改一下界面. 目录 MVC5 网站开发实践  ...

  3. ORM&colon;ODB安装使用过程

      1.下载odb-2.4.0-i686-windows,是cpp和sql文件生成工具,已经编译好了,如果下odb-2.4.0估计是未编译好的这个项目:   2.将...\odb-2.4.0-i686 ...

  4. C语言 const与指针

    //const与指针 #include<stdio.h> #include<stdlib.h> void main(){ ; ; const int *p; p = & ...

  5. bzoj2705

    一个常用的结论(方法) 只要知道gcd(i,n)=L 的i的个数s,我们就能很轻易得出答案 gcd(i,n)=L gcd(i/L,n/L)=1 不难得到这样的s=与n/L互质的个数=phi(n/L) ...

  6. Angularjs循环二维数组

    <div ng-app> <div ng-controller="test"> <div ng-repeat="links in slide ...

  7. Android必知必会--使用shape制作drawable素材

    前言 最近看到朋友制作的Android APP使用了极少的图片,但是图形却极其丰富,问了之后得知是使用shape绘制的,有很多优点. 下面是我整理的一些素材: 预览 下面是图片预览: 代码 布局文件 ...

  8. windows7 64位系统安装CPU版本TensorFlow(anaconda3&period;6)

    1>下载anaconda3.6,https://www.anaconda.com/download/,选择64位的anaconda3.6,安装时候,路径可以自定义,但是要选择把路径添加到环境变量 ...

  9. SignalR 2&period;x入门(二):SignalR在MVC5中的使用

    开发(代码下载) 新建一个ASP.NET Web项目,项目类型为MVC,将认证模式改为无身份认证.在程序包管理控制台输入如下语句,安装SignalR <span style="font ...

  10. BZOJ1758&lbrack;Wc2010&rsqb;重建计划——分数规划&plus;长链剖分&plus;线段树&plus;二分答案&plus;树形DP

    题目描述 输入 第一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表示政策要求的第一期重建方案中修建道路数的上下限 接下来的N-1行描述重建小组的原有方案,每行三个正整数Ai, ...