中国软件测试联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

http://www.wanmeiff.comJS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!
查看: 698|回复: 2

linux之系统编码,python编码,文件编码1

[复制链接]
发表于 2017-7-10 10:22:51 | 显示全部楼层 |阅读模式
织雀教育-物联网测试的黄埔军校,专注软件测试人才培养


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
这样的环境下去查看文件编码:
7101.png

中文显示直接乱码了,使用setfileencoding查看压根没有输出:
7102.png
环境初试回去后查看
[Asion@mobile220Python3]$ source ENV.sh
[Asion@mobile220Python3]$ locale
LANG=en_US.UTF-8

LC_ALL=en_US.UTF-8
7103.png
4     总结
就是你再牛逼的程序员,不推荐去动服务器的编码,除非服务器就只跑你自己的程序。
分享到: 更多
中国软件测试联盟(www.51sqae.com),一个免费权威的讨论新软件技术的论坛。
织雀教育-物联网测试的黄埔军校,专注软件测试人才培养
 楼主| 发表于 2017-7-10 10:47:31 | 显示全部楼层
视频:loadrunner性能测试视频教程:软件测试实用技术与常用模板(第15讲)
织雀测试提供软件测试工程师就业培训,零基础入职软件测试岗位,学员就业满意率高,体系完善,实训项目丰富,学完即安排工作
zhiqueedu.com
中国软件测试联盟(www.51sqae.com),一个免费权威的讨论新软件技术的论坛。
泛站群系统 该用户已被删除
发表于 2018-5-3 13:17:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
中国软件测试联盟(www.51sqae.com),一个免费权威的讨论新软件技术的论坛。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

本站资源仅供学习交流,非营利性质,如有侵权等行为,请联系管理员删除|中国软件测试联盟 ( 京ICP备17018412号;京公网安备11010802017997

GMT+8, 2018-11-18 01:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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