python字符串编码
- 中文输出
>>> import io
>>> import sys
>>> if int(sys.version[0])==2:
... f = open(txt_path, 'r')
... else:
... f = open(txt_path, 'r', encoding='utf-8')
...
>>> infos = f.readlines()
>>> f.close()
>>> print (infos[0])
Traceback (most recent call last):File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
>>> sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
>>> print (infos[0])
1 大众 2 一汽 3 宝来
- 首先由内置函数len()计算字符串长度来引出本文的内容。
>>> import chardet
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> s1='66'
>>> s2='中国'
>>> s3='中国66'
>>> len(s1), len(s2), len(s3)
(2, 6, 8)
>>> chardet.detect(s1), chardet.detect(s2), chardet.detect(s3)
({'confidence': 1.0, 'encoding': 'ascii'}, {'confidence': 0.7525, 'encoding': 'utf-8'}, {'confidence': 0.7525, 'encoding': 'utf-8'})
变量s2和变量s3的长度不是想得到的返回值,这是由于编码问题引起的。之前总结过一篇关于文件的编码文章,本文是对上篇文章的进一步探讨。
查看字符串变量的字节值(十六进制数,堡垒机终端的输出内容为十六进制数,jupyter输出为字符串变量的原始值)如下:
>>> s1
'66'
>>> s2
'\xe4\xb8\xad\xe5\x9b\xbd'
>>> s3
'\xe4\xb8\xad\xe5\x9b\xbd66'
将字节值变为unicode,重新计算各自的长度。
>>> s1_u = s1.decode('utf-8')
>>> s2_u = s2.decode('utf-8')
>>> s3_u = s3.decode('utf-8')
>>> isinstance(s1_u, unicode)
True
>>> isinstance(s2_u, unicode)
True
>>> isinstance(s3_u, unicode)
True
>>> len(s1), len(s2), len(s3)
(2, 6, 7)
>>> len(s1_u), len(s2_u), len(s3_u)
(2, 2, 3)
此时输出为期望得到的字符串变量长度。
本文提取的内容包括:
- unicode把所有语言统一到一套编码格式,不同格式的语言均可与之相互转换;
- ASCII编码为美国信息交换标准代码,最初用于表示英文大小写字母,数字及一些特殊符号,最多表示256种字符。对其他语言的支持较差;
- len()函数计算参数对象的的长度,不同的编码格式返回不同结果,字典,元组,列表的变量直接求长度,字符串变量需要转换为unicode;
- UTF-8编码为针对Unicode的可变长度字符编码,常用的英文为1个字节,汉字常为3个字节,只有生僻的字符才会被编码为4-6个字节。该格式输出内容比较直观,文件及变量常采用utf-8进行处理。
参考文献:
- https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431664106267f12e9bef7ee14cf6a8776a479bdec9b9000
- 解决Python3下打印utf-8字符串出现UnicodeEncodeError的问题
python字符串编码相关推荐
- Python字符串编码坑彻底详细解决 何梁
所以不同编码的str对象可以先解码(decode)成unicode 再编码(encode)成其他编码的str对象. 真正完全搞清楚Python的编码问题 我想大家经常被Python的编码问题搞的晕头转 ...
- python 字符串 编码 解码_Python 字符串编解码研究
Python 2.X 在输入汉字和特殊字符的时候,经常遇到编码解码的问题,究其原因,编译器默认将文件当做ascii编码,因此要正确的实现编解码的转换,需要进行一些设置. 首先让我们来了解几个概念. 文 ...
- python 字符串编码
通过字符串的decode和encode方法 1 encode([encoding,[errors]]) #其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib ...
- python字符串编码及乱码解决方案
http://blog.csdn.net/pipisorry/article/details/44136297 字符编码详解 [字符编码ASCII,Unicode和UTF-8] 主要非英文字符集的编码 ...
- Python字符串编码检测
字符串编码产生的乱码着实让人头疼-- 关于字符串和编码的知识,可以参考廖雪峰大大的博客字符串和编码 那么有没有办法完全正确的检测字符集编码呢?答案是:没有!参考how-to-determine-the ...
- python字符串编码_Python字符串编码答疑
Python 2中的字符串分类 在Python 2中字符串,有两个类型,一个是str,一个是unicode.str可以理解为ASCII的字符列表,说白了,只能存储ASCII字符,如果赋个中文值,会报错 ...
- python 字符串编码与解码
1. 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码 ...
- python字符串编码判断
2019独角兽企业重金招聘Python工程师标准>>> def is_chinese(uchar):"""判断一个unicode是否是汉字"& ...
- python 字符串编码解码和格式化问题
转自:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868191962 ...
最新文章
- JDK源码学习笔记——Integer
- div样式调整.txt
- Cisco配置单臂路由及静态路由
- android菜单和对话栏,Android回顾--(十一) 菜单和对话框
- 进程与multiprocessing模块
- [C++基础]队列queue中的常用函数
- 12满秩分解与奇异值分解(2)
- layabox定时器
- arcgis调整图框线宽
- 股票学习-量柱和k线-第四天
- 【Python学习】Python的点滴积累
- 870-Linux下解决高并发socket最大连接数限制
- 2020年有寓意的领证日期_2020年领证的好日子-2020有寓意的领证日期【蜜匠婚礼】...
- 【普通人VS程序员】电脑还可以这样关机,神操作,学到了学到了~(爆赞)
- 计算机云共享盘,搭建私人云网盘:局域网访问共享数据
- 咬断防盗绳偷 iPhone,月入万元不是梦
- win10蓝牙功能不见了_Win10 2004更新了什么?新功能新特性汇总
- CSS学习笔记 | CSS背景
- 开放Centos7端口
- 如何秒下单?python的淘宝秒杀抢购下单源码参考