python decode unicode encode

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

代码中字符串的默认编码与代码文件本身的编码一致,以下是不一致的两种:

1. s = u‘你好‘

该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码(查看默认编码:import sys   print(‘hello‘,sys.getdefaultencoding())  ascii 。设置默认编码:import sys reload(sys)  sys.setdefaultencoding(‘utf-8‘)))无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可.

2. # -*- coding: utf-8 -*-

s = ‘你好’

此时为utf-8编码,ascii编码不能显示汉字

isinstance(s, unicode)  #用来判断是否为unicode ,是返回True,不是返回False

unicode(str,‘gb2312‘)与str.decode(‘gb2312‘)是一样的,都是将gb2312编码的str转为unicode编码

使用str.__class__可以查看str的编码形式

原理说了半天,最后来个包治百病的吧:)



#!/usr/bin/env python
#coding=utf-8
s="中文"

if isinstance(s, unicode):
#s=u"中文"
print s.encode(‘gb2312‘)
else:
#s="中文"
print s.decode(‘utf-8‘).encode(‘gb2312‘)

语音模块代码:

# -*- coding: utf-8 -*-import
import sys
print(‘hello‘,sys.getdefaultencoding())
def xfs_frame_info(words):

    #decode utf-8 to python internal unicode coding
    isinstance(words,unicode)
    wordu = words.decode(‘utf-8‘)

    #encode python unicode to gbk
    data = wordu.encode(‘gbk‘)

    length = len(data) + 2

    frame_info = bytearray(5)
    frame_info[0] = 0xfd
    frame_info[1] = (length >> 8)
    frame_info[2] = (length & 0x00ff)
    frame_info[3] = 0x01
    frame_info[4] = 0x01

    buf = frame_info + data
    print("buf:",buf)

    return buf

if __name__ == "__main__":

    print("hello world")
    words1= u‘你好‘
    #encodetype = isinstance(words1,unicode)
    #print("encodetype",encodetype)
    print("origin unicode", words1)

    words= words1.encode(‘utf-8‘)
    print("utf-8 encoded", words)
    a = xfs_frame_info(words)
    print(‘a‘,a)

if __name__ == "__main__":

    print("hello world")
    words1= ‘你好‘
    print("oringe utf-8 encode:",words1)
    encodetype = isinstance(words1,unicode)
    wordu = words1.decode(‘utf-8‘)
    print("unicode from utf-8 decode:",wordu)
    #encodetype = isinstance(words1,utf-8)
    #encodetype = isinstance(words1,‘ascii‘)
    #print("encodetype",encodetype)
    #print("origin unicode", words1)

    word_utf8 = wordu.encode(‘utf-8‘)
    #encodetype2 = isinstance(words,utf8)
    #print("encodetype2",encodetype2)
    print("utf-8 encoded",word_utf8)
    a = xfs_frame_info(word_utf8)
    print(‘a‘,a)

你好前不加u‘‘时,要多一步decode为unicode

时间: 2024-10-08 15:53:00

python decode unicode encode的相关文章

Python decode与encode

字符串在Python内部的表示是unicode编码(8-bit string),因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码. decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码. encode的作用是将unicode编码转换成其他编码的字符串,如st

关于python decode()和 encode()

1.先收集一下这几天看到的关于decode()解码和encode()编码的用法 bytes和str是字节包和字符串,python3中会区分bytes和str,不会混用这两个.字符串可以编码成字节包,而字节包可以解码成字符串. 如下 非法!是字符串,编码成字节包,可以看到b'这种标识. 我们并不关心它们内部是怎么表示的,字符串里的每个字符要用几个字节保存.只有在将字符串编码成字节包(例如,为了在信道上发送它们)或从字节包解码字符串(反向操作)时,我们才会开始关注这点. 如果读出网页的内容是字节形式

python之分析decode、encode、unicode编码转换为汉字

decode()方法使用注册编码的编解码器的字符串进行解码.它默认为默认的字符串编码.decode函数可以将一个普通字符串转换为unicode对象.decode是将普通字符串按照参数中的编码格式进行解析,然后生成对应的unicode对象,比如在这里我们代码用的是utf-8,那么把一个字符串转换为unicode就是如下形式:s2='哈'.decode('utf-8′),s2就是一个存储了'哈'字的unicode对象,其实就和unicode('哈', 'utf-8′)以及u'哈'是相同的. 例: s

python 字符串编码 str和unicode 区别以及相互转化 decode('utf-8') encode('utf-8')

python 字符串编码 str和unicode 区别以及相互转化 decode('utf-8') encode('utf-8') 原文地址:https://www.cnblogs.com/zhaoyingjie/p/9133020.html

Python 字符串的encode与decode

python的str,unicode对象的encode和decode方法 python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byte[]. 而python中的unicode对象应该才是等同于java中的String对象,或本质上是java的char[]. 对于 s="你好" u=u"你好" 1. s.decode方法和u.encode方法是最常用的, 简单说来就是,python内部表示字符串用un

Python字符串的encode与decode研究心得 乱码问题解决方法

以下摘自:http://www.jb51.net/article/17560.htm 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x96\x87”的形式? 为什么会报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”?本文就来研究一下这个问题. 字符串在Python内部的表示

Python字符串的encode与decode研究心得——解决乱码问题

转~Python字符串的encode与decode研究心得——解决乱码问题 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“/xe4/xb8/xad/xe6/x96/x87”的形式?为什么会报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”?本文就来研究一下这个问题. 字符串在Python内部的表示是unico

关于Python字符编码encode和decode

(注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 记得几天前,部门的一个小姑娘问我,怎么她Python打印出来的中文信息都乱码了?我走过去,略思一二,瞬间给她搞定,其实这是字符编码转换的问题.这时,我注意到小姑娘流露出一丝丝崇拜的眼神.所以我想,如果你连编码问题都搞不定,还怎么泡妞啊.可能一部分人也会进入这种误区,我以我小学生的水平,把我的理解结合网上的资料写下来. 注意:Python3默认编码是unicode:而Python2是ASCII码.Windows环境默认是g

Python字符串的encode与decode研究心得乱码问题解决方法

为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成"\xe4\xb8\xad\xe6\x96\x87"的形式? 例如下面这个实际生活中我自己遇到的这段代码: #-*-utf-8-*-     txt = "今天,天气很好!风和日丽.感情丰富?"         print(re.split('[,.!?]',txt)) 为什么会报错"UnicodeEncodeError: 'ascii' codec can't encode ch