字符串在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

最新文章

  1. TCP的数据传输小结
  2. 从零开始编写自己的C#框架(21)——添加分类类型页面
  3. Java 消息摘要 散列 MD5 SHA
  4. Mysql 存储引擎 InnoDB与Myisam的主要区别
  5. 从0开始学java——Tomcat的安装及其常见错误排查(zz)
  6. nodejs(一) 简单登录验证 使用mongoose 操作MongoDB
  7. C# 按拼音/笔划 排序的简单示例(转)
  8. 搭建Discuz! (mysql+apache+Discuz! )
  9. cavium octeon 处理器启动总线Bootbus 简介
  10. 在Win8.1(64位)系统上安装Scrapy(python 2.7.7)
  11. IPoint Interface接口
  12. 解决Javascript大数据列表引起的网页加载慢/卡死问题。
  13. H5JS二维动画制作!two.js的基本操作class1
  14. Win 及 Linux 查找mac地址的方法
  15. 基于表单数据的封装,泛型,反射以及使用BeanUtils进行处理
  16. asp.net mvc控制器激活全分析
  17. python 第三方库的加载与虚拟机的登录
  18. Holer实现oracle数据库外网访问
  19. Python字符串 u"string",r"string"的写法含义
  20. request 请求头的处理

热门文章

  1. jsTree展开根节点 设置用户图标
  2. java在线聊天项目0.1版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包)
  3. ios之UITabelViewCell的自定义(xib实现)
  4. 通过工厂模式批量创建对象后调用其中方法 出现XXXis not a function()问题原因
  5. linux各种终端类型的区别和概念
  6. 四:SQL语句介绍
  7. 无法连接Elasticsearch解决方案
  8. python3.x 多路IO复用补充asyncio
  9. 【转发】【linux】【php】centos 编译php常见错误
  10. django第四天(路由别名,django2.x新特性和自定义转换器)