Python 字符串的编码转换、存储及乱码总结

Python2的字符串包含str、unicode两种类型,str的字符串编码方式由源码文件的编码方式决定,目前使用的基本都是UTF-8的编码格式,所以要在py文件的头部指定编码格式:

# -*- coding: utf-8 -*-

在Python程序内部,通常使用的字符串为unicode编码,这样的字符串字符是一种内存编码格式,如果将这些数据存储到文件或是记录日志的时候,就需要将unicode编码的字符串转换为特定字符集的存储编码格式,比如:UTF-8、GBK等等,很多时候Python程序员都会遇到乱码问题,相信以下的一些处理方式和技巧能帮助大家解决乱码问题。

unicode到utf-8转换方法:unicodestr.encode(‘utf-8’) ,示例:

>>> u'中文测试'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95'

utf-8到unicode转换方法:utf8str.decode(‘utf-8’),示例:

>>> '中文测试'.decode('utf-8')
u'\u4e2d\u6587\u6d4b\u8bd5'

实际上,在将unicode存储到文本的过程中,还有一种存储方式,不需要将unicode转换为实际的文本存储字符集,而是将unicode的内存编码值进行存储,读取文件的时候再反向转换回来,是采用:unicode-escape的转换方式。

unicode到unicode-escape转换方法:unicodestr.encode(‘unicode-escape’),示例:

>>> u'中文测试'.encode('unicode-escape')
'\\u4e2d\\u6587\\u6d4b\\u8bd5'

unicode-escape到unicode的转换方法:unicodeescapestr.decode(‘unicode-escape’),示例:

>>> '\\u4e2d\\u6587\\u6d4b\\u8bd5'.decode('unicode-escape')
u'\u4e2d\u6587\u6d4b\u8bd5'

对于utf-8编码的字符串,在存储的时候,通常是直接存储,而实际上也还有一种存储utf-8编码值的方法,即:string-escape。
utf-8到string-escape的转换方法:utf8str.encode(‘string-escape’),示例:

>>> '中文测试'.encode('string-escape')
'\\xe4\\xb8\\xad\\xe6\\x96\\x87\\xe6\\xb5\\x8b\\xe8\\xaf\\x95'
>>> print '\\xe4\\xb8\\xad\\xe6\\x96\\x87\\xe6\\xb5\\x8b\\xe8\\xaf\\x95'
\xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95

string-escape到utf-8的转换方法:strescapestr.decode(‘string-escape’),示例:

>>>’\\xe4\\xb8\\xad\\xe6\\x96\\x87\\xe6\\xb5\\x8b\\xe8\\xaf\\x95'.decode('string-escape')
'\xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95’
>>> print '\xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95'
中文测试

备注:
unicode同时还支持的编码转换包括:

idna
raw_unicode_escape
utf_8_sig

utf-8、gbk等编码字符串还支持得编码转换包括:

base64
quopri
bz2
hex
unicode_internal
uu
zlib

时间: 2024-08-31 23:25:29

Python 字符串的编码转换、存储及乱码总结的相关文章

PHP实现自动识别原编码并对字符串进行编码转换的方法_php技巧

本文实例讲述了PHP实现自动识别原编码并对字符串进行编码转换的方法.分享给大家供大家参考,具体如下: /** * 对数据进行编码转换 * @param array/string $data 数组 * @param string $output 转换后的编码 * Created on 2016-7-13 */ function array_iconv($data, $output = 'utf-8') { $encode_arr = array('UTF-8','ASCII','GBK','GB2

用c/c++处理编码转换防止乱码产生

问题描述 用c/c++处理编码转换防止乱码产生 最近在做一个从ftp上获取文件信息的项目,想问一下从ftp取得信息后如何进行编码转换才能防止乱码的产生,在windos环境下,用c++解决 解决方案 都统一用UTF8等来进行编码,各种其他编码进行转换等 解决方案二: 不都是采用中文的格式吗

Asp.Net中的字符串和HTML十进制编码转换实现代码_实用技巧

Asp.Net将字符串转为区码位编码,或者将区码位编码字符串转为对应的字符串内容. 数字;这种编码其实就是将单个字符转为对应的区码位(数字),然后区码位前缀加上"",后缀加上";"组成,对于这种编码的字符串,浏览器会自动解析为对应的字符. Asp.Net字符串和编码转换源代码和测试代码如下: using System; using System.Text.RegularExpressions; public partial class purchase_proper

python 编码转换 专题

主要介绍了python的编码机制,unicode, utf-8, utf-16, GBK, GB2312,ISO-8859-1 等编码之间的转换. 常见的编码转换分为以下几种情况: 自动识别 字符串编码 可以使用 chardet 模块自动识别 字符创编码 chardet 使用方法 unicode 转换为其它编码(GBK, GB2312等) 例如:a为unicode编码 要转为gb2312.a.encode('gb2312') # -*- coding=gb2312 -*- a = u"中文&qu

python编码编码转换问题

问题描述 python编码编码转换问题 sent = unicode(sent,'utf-8') UnicodeDecodeError: 'utf8' codec can't decode byte 0xce in position 0: invalid continuation byte 解决方案 要在你的python文件头加一句utf8编码,你百度搜一下,我忘记具体怎么写了,反正只要一句话! 解决方案二: 你的sent是什么编码的字符串,它不能被UTF8 decode

二进制-python3.5 如何将01字符串编码后存储

问题描述 python3.5 如何将01字符串编码后存储 自己写的如下: def encodesave (instr): re='' for i in range (len(instr)//bit-1): re=re+chr(int(instr[(i*bit):(i*bit+bit)],2)) return bytes(re,encoding = "UTF-8").decode("UTF-8") 就是instr是很长的由0和1组成的字符串,然后每8个bit不是一个字

Python入门(二)——IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化

Python入门(二)--IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化 我们从今天就开始正式的学习PY交易了,PY交易还行,我们有基础之后学习起来倒不是说那么的被动,我学习的是Python2.7,虽然现在随着版本的迁移至Python3,但是这个并不会对我们造成什么困扰,毕竟只是一个适应阶段 我们的学习资料:廖雪峰官方网站Python2.7教程 一.IDE选择PyCharm 我们虽然在前面一章已经配置过,但是我们还是有很多的IDE可以开发Py,比如su

Python判断字符串与大小写转换

  这篇文章主要介绍了Python判断字符串与大小写转换的方法,有需要的小伙伴可以参考下. 判断字符串 ? 1 2 3 4 5 6 7 s.isalnum() #所有字符都是数字或者字母 s.isalpha() #所有字符都是字母 s.isdigit() #所有字符都是数字 s.islower() #所有字符都是小写 s.isupper() #所有字符都是大写 s.istitle() #所有单词都是首字母大写,像标题 s.isspace() #所有字符都是空白字符.t.n 大小写转换 ? 1 2

浅析PHP中的字符串编码转换(自动识别原编码)

本篇文章是对PHP中字符串编码转换的实现代码进行了详细的分析介绍,需要的朋友参考下   复制代码 代码如下: /**  * 对数据进行编码转换  * @param array/string $data       数组  * @param string $output    转换后的编码  */ function array_iconv($data,$output = 'utf-8') {  $encode_arr = array('UTF-8','ASCII','GBK','GB2312','