• 中文输出
>>> 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)

此时输出为期望得到的字符串变量长度。

本文提取的内容包括:

  1. unicode把所有语言统一到一套编码格式,不同格式的语言均可与之相互转换;
  2. ASCII编码为美国信息交换标准代码,最初用于表示英文大小写字母,数字及一些特殊符号,最多表示256种字符。对其他语言的支持较差;
  3. len()函数计算参数对象的的长度,不同的编码格式返回不同结果,字典,元组,列表的变量直接求长度,字符串变量需要转换为unicode;
  4. UTF-8编码为针对Unicode的可变长度字符编码,常用的英文为1个字节,汉字常为3个字节,只有生僻的字符才会被编码为4-6个字节。该格式输出内容比较直观,文件及变量常采用utf-8进行处理

参考文献:

  1. https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431664106267f12e9bef7ee14cf6a8776a479bdec9b9000
  2. 解决Python3下打印utf-8字符串出现UnicodeEncodeError的问题

python字符串编码相关推荐

  1. Python字符串编码坑彻底详细解决 何梁

    所以不同编码的str对象可以先解码(decode)成unicode 再编码(encode)成其他编码的str对象. 真正完全搞清楚Python的编码问题 我想大家经常被Python的编码问题搞的晕头转 ...

  2. python 字符串 编码 解码_Python 字符串编解码研究

    Python 2.X 在输入汉字和特殊字符的时候,经常遇到编码解码的问题,究其原因,编译器默认将文件当做ascii编码,因此要正确的实现编解码的转换,需要进行一些设置. 首先让我们来了解几个概念. 文 ...

  3. python 字符串编码

    通过字符串的decode和encode方法 1 encode([encoding,[errors]]) #其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib ...

  4. python字符串编码及乱码解决方案

    http://blog.csdn.net/pipisorry/article/details/44136297 字符编码详解 [字符编码ASCII,Unicode和UTF-8] 主要非英文字符集的编码 ...

  5. Python字符串编码检测

    字符串编码产生的乱码着实让人头疼-- 关于字符串和编码的知识,可以参考廖雪峰大大的博客字符串和编码 那么有没有办法完全正确的检测字符集编码呢?答案是:没有!参考how-to-determine-the ...

  6. python字符串编码_Python字符串编码答疑

    Python 2中的字符串分类 在Python 2中字符串,有两个类型,一个是str,一个是unicode.str可以理解为ASCII的字符列表,说白了,只能存储ASCII字符,如果赋个中文值,会报错 ...

  7. python 字符串编码与解码

    1. 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码 ...

  8. python字符串编码判断

    2019独角兽企业重金招聘Python工程师标准>>> def is_chinese(uchar):"""判断一个unicode是否是汉字"& ...

  9. python 字符串编码解码和格式化问题

    转自:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868191962 ...

最新文章

  1. JDK源码学习笔记——Integer
  2. div样式调整.txt
  3. Cisco配置单臂路由及静态路由
  4. android菜单和对话栏,Android回顾--(十一) 菜单和对话框
  5. 进程与multiprocessing模块
  6. [C++基础]队列queue中的常用函数
  7. 12满秩分解与奇异值分解(2)
  8. layabox定时器
  9. arcgis调整图框线宽
  10. 股票学习-量柱和k线-第四天
  11. 【Python学习】Python的点滴积累
  12. 870-Linux下解决高并发socket最大连接数限制
  13. 2020年有寓意的领证日期_2020年领证的好日子-2020有寓意的领证日期【蜜匠婚礼】...
  14. 【普通人VS程序员】电脑还可以这样关机,神操作,学到了学到了~(爆赞)
  15. 计算机云共享盘,搭建私人云网盘:局域网访问共享数据
  16. 咬断防盗绳偷 iPhone,月入万元不是梦
  17. win10蓝牙功能不见了_Win10 2004更新了什么?新功能新特性汇总
  18. CSS学习笔记 | CSS背景
  19. 开放Centos7端口
  20. 如何秒下单?python的淘宝秒杀抢购下单源码参考

热门文章

  1. 2021年前端工程师书单推荐
  2. 钛灵AI市场打破供需鸿沟,提供广阔商业空间
  3. 面试题:给你一个团队,你如何领导
  4. 上汽联合阿里百亿投资,打造智能汽车时代的领跑者!
  5. 2016经典搞笑语录:老师我错了,您当场把它砸了吧。
  6. PHP正则匹配数字,字母,中文
  7. 分布式压力测量项目分享
  8. 从网站的价值中看网站建设
  9. 写一篇决策与判断这本书的500字读后感
  10. NodeJS 导入包的时候出现的 @types 错误导致程序无法运行