python coding utf-8_【转】怎么在Python里使用UTF-8编码

基本概念

在Python里有两种类型的字符串类型:字节字符串和Unicode的字符串,一个字节字符串就是一个包含字节列表。 当需要的时候,Python根据电脑默认的locale设置将字节转化成字符。 在Mac OX上默认的编码是UTF-8,但是在别的系统上,大部分是ASCII。

比如创建一个字节字符串:

byteString = "hello world! (in my default locale)"

创建一个Unicode字符串:

unicodeString = u"hello Unicode world!"

将一个字节字符串转成Unicode字符串然后再转回来:

s = "hello byte string"

u = s.decode()

backToBytes = u.encode()

以上代码使用的是系统默认的字符来出来转换的。 然而,依赖系统的区域设置的字符集不是一个好主意,或许你的程序在泰文用户的电脑上就会崩溃。 最好的办法就是为字符指定一个编码:

s = "hello normal string"

u = s.decode("UTF-8" )

backToBytes = u.encode( "UTF-8" )

现在,字节字符串s就被当成一个UTF-8字节列表去创建一个Unicode字符串u, 下一行用UTF-8表示的字符串u转换成字节字符串backToBytes.

如何判断一个对象是字符串

比如这样去判断:

if isinstance( s, str ):

pass

这样是不对的,因为Unicode字符串将不为真. 代替的是使用通用字符串类,

if isinstance( s, basestring ):# True for both Unicode and byte strings

pass

单独判断是不是Unicode字符串:

if isinstance( s, unicode ):

pass

读取UTF-8编码的文件

你可以手工转换从文件中读取的字符串,方法很简单:

import codecs

fileObj = codecs.open( "someFile", "r", "UTF-8" )

u = fileObj.read() # Returns a Unicode string from the UTF-8 bytes in the file

源码的编码声明

Python源代码默认是 ASCII.可以在源文件的第一行或者是第二行作如下声明:

# coding=UTF-8

or (using formats recognized by popular editors):="block" data-draft-type="table" data-size="normal" data-row-style="normal">1

2#!/usr/bin/python

# -*- coding: UTF-8 -*-

or:="block" data-draft-type="table" data-size="normal" data-row-style="normal">1

2#!/usr/bin/python

# vim: set fileencoding=UTF-8 :

系统编码

前面说了,Python根据电脑默认的locale设置将字节转化成字符.那如何获得系统的默认编码:

import sys

print sys.getdefaultencoding()

更改系统的默认编码:

import sys

reload(sys)

sys.setdefaultencoding('UTF-8')

为什么要reload sys模块,先看下python的模块加载过程:

# python -v

# installing zipimport hook

import zipimport # builtin

# installed zipimport hook

# /usr/local/lib/python2.6/site.pyc matches /usr/local/lib/python2.6/site.py

import site # precompiled from /usr/local/lib/python2.6/site.pyc

....

Python运行的时候首先加载了site.py,在site.py文件里有这么一段代码:

if hasattr(sys, "setdefaultencoding"):

del sys.setdefaultencoding

在sys加载后,setdefaultencoding方法被删除了,所以我们要通过重新导入sys来设置系统编码.

更多学习内容:字符集与字符编码 - 网易云课堂​study.163.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lisp6 暖通cad_(完整版)暖通CAD设计技巧1

暖通CAD设计技巧1.执行编辑命令,提示选择目标时,用矩形框方式选择,从左向右拖动光标,为"窗口Windows"方式,如果从右向左拖动光标,则为"交*Cross"方式。2.相对坐标输入点时,…

html5音乐播放器设计论文,基于微信小程序的音乐播放器设计和毕业论文

摘 要随着通信技术的发展和智能设备的普及,移动互联网在近两年发展迅猛,新兴的移动社交软件“微信”逐渐走进了手机用户的生活,深受全国数亿用户的欢迎。随着微信版本的不断更新,微信也从单纯的聊天应用逐变成媒体信息、游戏娱乐…

python递归_python3之递归

1、递归的特点 递归算法是一种直接或间接调用自身算法的过程,在计算机编程中,递归算法对解决一大类问题是十分,它往往使算法的描述简洁而且易于理解。 递归算法解决问题的特点: (1)递归就是在过程或函数里调…

什么原因导致芯片短路_PCB电路板短路的原因及解决方法-EDA/PCB-与非网

【导读】焊接短路(如:连锡)、PCB 短路(如:残铜、孔偏等)、器件短路、组装短路、ESD/EOS 击穿、电路板内层微短路、电化学短路(如:化学残留、电迁移)、其他原因造成的短路。首先,了解一下常见的电路板短路的种类:短路按…

html表格按钮相对位置不变,表格中如何使td或div相对定位在某一行上面

有个需求,就是点击表格某一行,上面要居中显示一组菜单。而列表需要有1列或多列不固定宽度,有的是百分比宽度,有的是固定宽度(就是传统的table用法,或者CSS3的Flex Box)小伙伴的实现是用table,js算出距表头的…

python远程监控jvm_python和jstat命令采集jvm数据导入zabbix监控-阿里云开发者社区

利用python和jstat命令采集jvm数据注:用法运行python jvcheck.py 变量如EC或E等#codingutf-8#authoryangzai# 用jstat检查jvm信息然后用zabbix监控import commandsimport sysjvmvarssys.argv[1](status, PID) commands.getstatusoutput("sudo -u tomcat jps|g…

pythonstdin_如何写入Python子进程'stdin?

下面是它的样子对NUKE 11.3v4的商业版本Windows 10:import subprocess# Run NUKEs script in Terminal mode on Windows machine...subprocess.Popen([C:/Program Files/Nuke11.3v4/Nuke11.3.exe, -t, E:/NukeTest/test.nk], stdinPIPE, stdoutPIPE) 以下是NUKE 11.…

html信号动画,HTML5 Canvas火箭着陆和雷达信号动画

JavaScript语言:JaveScriptBabelCoffeeScript确定let canvas document.querySelector(canvas);let ctx canvas.getContext(2d);canvas.width document.body.clientWidth;canvas.height 150;let centerX canvas.width / 2;let centerY canvas.height / 2;let l…

python后端开发学什么_零基础学Python,这是阿里Python8年开发经验写给你的学习路线图...

今天给大家分享一位前辈整理的一个Python web学习路线。这位前辈由于有编程基础,所以采用了自学Python的方式。学完后主要做后端开发。希望对你有所启发。 整理的一个 python web 学习路线,这基本就是笔者自学后做后端的学习路线。入门基础 编程语言: Py…

html filter 在线预览,HTML Filter

HTML Filter05/31/20182 分钟可看完本文内容NoteIndexing Service is no longer supported as of Windows XP and is unavailable for use as of Windows 8. Instead, use Windows Search for client side search and Microsoft Search Server Express for server side search.…

xftp6设置默认打开文件的程序_xftp6如何使用?xftp6传输文件的使用详细方法--系统之家...

xftp6是一款功能强大主要用于SFTP、FTP 文件传输的软件,能够帮助用户安全地在 UNIX/Linux 和 Windows PC 之间传输文件。很多小伙伴下载了软件后对于xftp6怎么使用不太清楚,下面小编就把xftp6使用详细方法分享给大家!Xftp6使用方法&#xff1…

如何把meshlab中的圆环去掉_如何设计一座太空城?

整整半个世纪前的今天,1969年7月20日,执行阿波罗11号计划的美国宇航员阿姆斯特朗和奥尔德林登上月球。而同一年,伍德斯托克音乐节的舞台前聚集了几十万名追求和平与爱的青年。在神奇的1969年,人类文明向着更为广袤与深邃的境地突飞…

axure html 360安装扩展,win10系统360浏览器添加Axure扩展的操作方法

win10系统360浏览器添加Axure扩展的操作方法?很多win10用户在使用电脑的时候,会发现win10系统360浏览器添加Axure扩展的的现象,根据小编的调查并不是所有的朋友都知道win10系统360浏览器添加Axure扩展的的问题怎么解决,不会的朋友也不用担心…

unity自动生成敌人_Unity 3D做2D坦克大战--敌人自动攻击AI编写

敌人AI攻击方法的编写老师 | Trigger学习者 |小白出品 | Siki 学院javapublic class Enemy : MonoBehaviour{//属性值public float movespeed 3;private Vector3 bullectEulerAngles;private float v -1;private float h;//引用private SpriteRenderer sr;public Sprite[] ta…

python删除txt指定内容_使用Python删除文本文件中的部分内容 | 学步园

为了学习英语,我把从网上下载下来的电影转换成纯MP3文件,放到iTouch里去了,这样就可以直接练习听力了,另外把下载下来的字幕也放进去,听不懂的时候可以看,但有一个问题,网上载下来的字幕格式都如…

电信计算机知识考试,2020中国电信考试试题——专业知识一

1、我国对独立型STP设备要求其信令链路数不得小于( )A、7000MSU/s;B、10000MSU/s;C、14000MSU/s;D、20000MSU/s2、GSM的多址方式为( )A、FDMA; B、TDMA; C、CDMA; D、FDMA-TDMA混合技术3、以下属于被叫控制…

vue实现进度条隐藏_实现带有进度条的Vue延迟加载

下面Vue.js栏目给大家介绍一下给Vue的惰性加载添加进度条的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。简介通常用 Vue.js 编写单页应用(SPA)时,当加载页面时,所有必需的资源(如 JavaScript 和 CSS 文…

full outer join 与full join的区别_sleep、yield、join都是干啥的? sleep与wait有啥区别?中篇[十五]...

点击上方 “ 布衣码农 ” ,免费订阅~选择“ 设为星标 ”,第一时间免费获得更新~「布衣码农」用不到却又不得不学习了解的底层方法1。Object中的wait、notify、notifyAll,可以用于线程间的通信,核心原理为借助于监视器的入口集与等…

npu算力如何计算_异构计算神器来了,它能带来性能革命吗

前言:优化差有多要命?3A大作告诉您说到最近游戏圈子里的热门话题,刚刚在全平台上线的某“国产3A大作”显然绝对值得一提。一方面来说,靠着“抽卡化单机游戏”的设计,以及投入几十万元都难以实现全角色满状态的高氪金程…

四川大学计算机专业贵州分数线,四川大学2016年在贵州省高考各专业录取分数线...

四川大学2016年在贵州各专业录取分数线省份 科类 录取专业 录取最高分 录取最低分 录取平均分贵州 文科 旅游管理类 640 639 639.5贵州 文科 历史学类 641 636 639贵州 文科 新闻传播学类 645 639 641.33贵州 文科 信息资源管理 640 637 638.5贵州 文…