设为首页 收藏本站
查看: 1205|回复: 0

[经验分享] linux之系统编码,python编码,文件编码

[复制链接]
发表于 2018-8-14 12:12:10 | 显示全部楼层 |阅读模式
1     前言
  如果你对python2和python3的中编解码很清楚,这里我认为你很清楚。
  具体参考文档:
  “python2 encode和decode函数说明.docx”
  “字符编码——从ASCII开始.docx”
  以上所有文档均为本地文档。
2     Python编码
  sys.getdefaultencoding(): 获取系统当前编码,这里的系统指的是python自己的内置系统,并非操作系统,即3中的python编码。
  sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding(‘utf8’),此时将系统默认编码设置为utf8。
  sys.getfilesystemencoding(): 获取文件系统使用编码方式,Windows下返回’mbcs’,mac下返回’utf-8’.
  这部分内容可参见“Python判断当前操作系统类型以及os, sys, platform模块简介”
  其实我认为这部分对后面的故障定位没作用。
3     系统编码,python编码,文件编码
3.1   系统编码
  默认写源码的编辑器的编码方式。它代表源码文件内的所有内容都是根据此方式编码成二进制码流。存入到磁盘中的。linux下通过locale命令查看。
  这部分编码就是所谓的编辑器的编码,例如vi命令。
  补充:如你在linux终端,直接从其他地方将文本拷贝如linux中,此时将采用系统编码进行编码,通过locale命令查看:
  [Asion@mobile220~]$ locale
  LANG=GBK
  LC_CTYPE="C"
  LC_NUMERIC="C"
  LC_TIME="C"
  LC_COLLATE="C"
  LC_MONETARY="C"
  LC_MESSAGES="C"
  LC_PAPER="C"
  LC_NAME="C"
  LC_ADDRESS="C"
  LC_TELEPHONE="C"
  LC_MEASUREMENT="C"
  LC_IDENTIFICATION="C"
  LC_ALL=C
  [Asion@mobile220Python3]$ more ENV.sh
  #!/bin/bash
  export LC_ALL="en_US.UTF-8"
  export LANG="en_US.UTF-8"
  [Asion@mobile220Python3]$ source ENV.sh
  [Asion@mobile220Python3]$ locale
  LANG=en_US.UTF-8
  LC_CTYPE="en_US.UTF-8"
  LC_NUMERIC="en_US.UTF-8"
  LC_TIME="en_US.UTF-8"
  LC_COLLATE="en_US.UTF-8"
  LC_MONETARY="en_US.UTF-8"
  LC_MESSAGES="en_US.UTF-8"
  LC_PAPER="en_US.UTF-8"
  LC_NAME="en_US.UTF-8"
  LC_ADDRESS="en_US.UTF-8"
  LC_TELEPHONE="en_US.UTF-8"
  LC_MEASUREMENT="en_US.UTF-8"
  LC_IDENTIFICATION="en_US.UTF-8"
  LC_ALL=en_US.UTF-8
3.2   python编码
  指python内设置的解码方式。如果不设定的话,python默认的是ascii解码方式。如果python源代码文件中不出现中文的话,这个地方怎么设定应该不会问题。设定方法:在源码文件开头(一定是第一行):#-*-coding:UTF-8-*-,源码文件的设置解码方式是UTF-8
3.3   文件编码
  文本的编码方式,linux下vim利用set fileencoding查看。
  注意使用这个命令查看编码时,需保证locale下的
  LC_ALL="en_US.UTF-8"
  LANG="en_US.UTF-8"
  与你当时编码这个文件时一致,否则显示不出来。
  PS:当时我vi sendmail.py的文件编码是utf-8,即locale下显示是en_US.UTF-8;
  [Asion@mobile220 Python3]$ ls
  ENV.sh sendmail.py
  [Asion@mobile220Python3]$ locale
  LANG=GBK
  ….
  LC_ALL=C
  这样的环境下去查看文件编码:
DSC0000.png

  中文显示直接乱码了,使用setfileencoding查看压根没有输出:
DSC0001.png

  环境初试回去后查看
  [Asion@mobile220Python3]$ source ENV.sh
  [Asion@mobile220Python3]$ locale
  LANG=en_US.UTF-8
  …
  LC_ALL=en_US.UTF-8
DSC0002.png

4     总结
  就是你再牛逼的程序员,不推荐去动服务器的编码,除非服务器就只跑你自己的程序。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551629-1-1.html 上篇帖子: 利用python实现数字组合 下篇帖子: ​Python中面向对象的编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表