我们来说说 Python 中是如何存储字符的,先来看一个乱码的例子。新建一个 demo.py 文件,文件存储格式为utf-8文件中内容如下。
utf-8: 可变长编码,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。
使用Python语言做网络爬虫或者写自动化脚本时,总会遇到“中文乱码”的问题,很是头疼。很多“中文乱码”的问题是跟Python的解码/编码有关,所以今天和大家说说Python的解码/编码(以Python2.7为例)。 1.什么是Python解码/编码? Python里面的解码和编码也就是unicode和str这两种形式的相互转化。解码就是str -> unicode,相反的,编码是unicode -> str。 总的来说就是:unicode是Python解释器的内码,所有代码文件在导入并执行时,Python
在用XMLHTTP进行远程数据传输的时候,如果涉及到不同编码,比如从oblog向我的博客发送一个trackback ping,数据中包含的中文字符就会出现乱码。 为了解决这个问题,可以在发送之前,把所有的数据中的中文都进行Unicode编码然后再传输。这样就可以顺利解决问题。 但是有时候还会涉及到另外一个问题,就是到了目标程序后,要进行数据库检索,发送过来的中文字符串都已经编码为类似 绎 这样的Unicode编码,而数据库中的数据虽然以unicode编码保存,但是却还是中文字符,并没有表示为 &
/** * 中文转换为JSON字符串 * @param $chinese_str 中文:可以包含中文字母数字 * @return string */ function json_encode($chinese_str) { $chinese_str = iconv('UTF-8', 'UCS-2', $chinese_str); $len = strlen($chinese_str) - 1; $str = ''; for ($i = 0; $i < $len; $i
python 2.x默认的字符编码是ASCII,默认的文件编码也是ASCII。
前言 曾几何时 Python 中文乱码的问题困扰了我很多很多年,每次出现中文乱码都要去网上搜索答案,虽然解决了当时遇到的问题但下次出现乱码的时候又会懵逼,究其原因还是知其然不知其所以然。现在有的小伙伴为了躲避中文乱码的问题甚至代码中不使用中文,注释和提示都用英文,我曾经也这样干过,但这并不是解决问题,而是逃避问题,今天我们一起彻底解决 Python 中文乱码的问题。
视频汇总首页:http://edu.51cto.com/lecturer/index/user_id-4626073.html
转载于:廖雪峰的官方网站-python教程 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。 由于计算机
最近业务中需要用 Python 写一些脚本。尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息。 很快,我就遇到了异常: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128) 为了解决问题,我花时间去研究了一下 Python 的字符编码处理。网上也有不少文章讲 Python 的字符编码,但是我看过一遍,觉得自己可以讲得
为什么会报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”?本文就来研究一下这个问题。
*首先要搞清楚,字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,
最近业务中需要用 Python 写一些脚本。尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息。
python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串处理的原理,附带解决 json 文件输出时,显示中文而非 unicode 问题。首先简要介绍字符串编码的历史,其次,讲解 python 对于字符串的处理,及编码的检测与转换,最后,介绍 python 爬虫采取的 json 数据存入文件时中文输出的问题。 参考书籍:Python网络爬虫从入门到实践 by唐松
json.dumps(var,ensure_ascii=False)并不能解决中文乱码的问题
用lxml库处理网页时遇到的,写个转换程序用用。 注:ASCII转unicode和中文转unicode是两个东西(起码在unicode在线转换网站上这两个不同),虽然说是中文,其实输入英文字母也没问题(表述可能不够准确,但大概是那么个意思)。
我们知道,Python 的变量名是可以使用 Unicode 字符的,也就是非英文字母也可以当做变量名,例如:
翻遍整个 GitHub , Golang 中文转拼音类库, 怎么就这么难找呢? 于是我造了一个轮子: 中文转拼音类库. 目前来说应该是最好用的了. GitHub 传送门: https://github
然后,大多数人的做法是,调用encode/decode进行调试,并没有明确思考为何出现乱码
相同点:python解释器是解释执行文件内容的,因而python解释器具备读py文件的功能,这一点与文本编辑器一样
Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
关于python编码的基本常识 在python里面 “明文”是unicode类型 “密文”是其他的编码格式 如gbk utf-8 latin-1等等 编码: “明文”->”密文” .encode([目标编码格式]) 对象必须为unicode类型 解码: “密文”->”明文” .decode([源编码格式]) 对象为str类型 对于汉字 一共有三大类编码方式 以中文汉字”李”为例子 a. unicode类 机器码 \x67\x4e unicode(python表示) \u674e HTML E
我们在使用python处理中文字符串时总会遇到一些问题,特别是一些老项目需要用到python2,中文显示乱码,文件读写异常等问题时常发生。
一、 了解一下编码的发展。 1、 计算机只能处理数字,如果需要处理文本,需要先将文本转换为数字。因为计算机是美国梆子发明的,所以他们发明了最早的编码--ASCII编码,也就是将他们的大小写字符数字和一些符号编码得到计算机中。比如A的编码是65。 2、 随着计算机在中国发展起来,拿ASCII去处理中文,显然是不够的,因为英文需要一个字节处理,而中文是需要两个字节。为了满足需求我们中国发明了自己的编码GB2312。将中文编进去。 3、 我们中国如此,世界上那么多语言岂不是每种语言都需要一种编码标准,如果一个文本中有多种语言,到时候产生的结果就是出现乱码。 4、 为顺应发展,比较叼的Unicode编码出生了,这个东西将所有的语言都统一到一套编码中。这样就不会再出现乱码的问题。虽然这个东西够强大,但是却有一个不能小觑的缺点。相比于ASCII编码要多出一倍的储存空间。例如:A ascii:65 二进制:01000001 unicode:00000000 01000001 5、 所以秉承着节约的原则,UTF-8应运而生,好处编码可变长。例如A的UTF-8:01000001,可以将unicode编码中的前面的零节约掉。 二、 在计算机 系统中通用编码的工作方式 1、 当我们编辑文档的时候,读取文档内容将UTF-8字符转换为unicode字符到内存中。因为这里需要显示,为了避免乱码,使用通用的Unicode编码。 2、 当编码编辑完成后,再将Unicode的编码转换为UTF-8保存到文件中。因为这里是需要存入磁盘中的,为节约储存空间,使用可变编码长度的UTF-8编码。 三、 python3字符编码 python的字符串类型是str,在内存中以Unicode表示。 1、 如果需要在网络上传输,或者保存到存储设备上,就需要将str变成以字节为单位的bytes。可以使用encode()方法。通过第一大点的了解,我们知道Unicode表示的str可以通过ASCII和utf-8编码转换。但是转换中文的时候,一定使用utf-8,因为含有中文的str无法用ASCII编码,超出了ASCII编码的范围。例如:
Property文件中,使用的编码根据机器的设置可能是GBK或者UTF-8。而在Java中读取Property文件时使用的是Unicode编码,编码方式不同会导致中文乱码,因此需要将Property文件中的中文字符转化成Unicode编码才能正常显示中文。
产生这样结果的原因是Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
比如一款游戏《大话西游》用的是gbk编码开发的。出口到欧美国家,是无法直接运行的。
如上面代码,str\str1\str2均为字符串类型(str),给字符串操作带来较大的复杂性。
在Python2.X及Python3有时经常碰到各种中文乱码的情况,这里整理了相关各种情况汇总。
可见非列表中的数据在输出时是会转换成中文显示出来的,但列表中的unicode数据不会。
学习并了解到Html编码的知识,源于工作中的产品需求。如果一个URL里面包含Puny Code(不仅仅指中文,还可能是韩文等Unicode里非英文的国家文字,本文以含中文的URL为例),而且这个URL刚好被保存在Html中作为链接,那么其中的Puny Code将会被编码,因为中文等字符不能直接储存在Html的链接中。如果这时使用工具提取Html中URL,所得到的URL就需要解码处理。
原链接: http://notewo.sinaapp.com/blog/full_article/?blogid=54 python 里面的编码和解码,就是unicode 和str 这两种形式的相
最开始电脑的字符集是ASCII,英文在ASCII中每个字母占1个字节,但ASCII不支持中文,所以后来出现了Unicode;
使用 php 自带的 json_encode 函数对数据进行编码时,中文都会变成 unicode,前面我介绍了如何使得中文不被 json_encode 不编码成 unicode。
以下内容转自博客:http://blog.chinaunix.net/uid-22670933-id-1771613.html。
# Auther: Aaron Fan ''' ASCII:不支持中文,1个英文占1个字节 Unicode(万国码,支持所有国家的文字显示):支持中文,但是每个英文和中文都占2个字节 UTF-8(是一种针对Unicode的可变长度字符编码,又称万国码。): 英文依然按照ASCII的方式占1个字节,所有的中文字符统一是3个字节 Unicode里面支持各个国家的编码转换,比如当中国的gbk格式的软件在日本打开出现乱码的时候, 必须把gbk转成Unicode编码后才可以正常显示。 GBK:
自动化测试过程中,输入文本、读取文件、解析网络请求、字符串断言、正则匹配这些步骤都是必不可少的。而Python是测试过程中最为常用的语言之一,很多测试团队的自动化代码和用例都是使用Python语言开发和维护的。 由于Python在最初发布时,Unicode标准还没有完成,所以一直以来Python对Unicode的支持并不完全,而ASCII编码支持的字符有限。因此在涉及到中文的自动化用例中,经常会遇到中文字符编解码的各种各样的异常。本文从文字编码的历史讲起,抛砖引玉,浅析了Python2.x版本中文字处理的原
python2不是以unicode作为基本代码字符类型,碰到乱码的几率是远远高于python3,但即便如此,相信很多人,也不想随意的迁移到python3,这里就总结几个我平常碰到的问题及解法。 文件中无法使用中文注释 处理方法: 在代码中增加# -*- coding=UTF-8 -*-,一般加在文件头部第一行,如果第一行是脚本标志,则放在第二行(实际仍然是python正本的第一行)。 随后将文件另存为UTF-8格式。 此方法可以解决注释中有中文,及字符串立即数中包含中文的问题。 unicode中文变
python 中的 unicode是让人很困惑、比较难以理解的问题. 这篇文章 写的比较好,utf-8是 unicode的一种实现方式,unicode、gbk、gb2312是编码字符集.
字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?
python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识。当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了。
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
计算机里面,编码方法有很多种,英文的一般用ascii,而中文有unicode,utf-8,gbk,utf-16等等。
在利用 Python 将字典数据保存为 json 时,查看数据发现中文全部显示的为 Unicode 编码,如下所示:
前面实现的字符处理,大小写转换是使用了VBA内置函数实现的,如果不使用VBA的UCase和LCase函数,我们如何完成大小写转换?
---------------------------------------------------- 作者:JamesHH 链接:https://www.jianshu.com/p/8c57d87a76c6 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
领取专属 10元无门槛券
手把手带您无忧上云