python 之编码转换 unicode, utf-8, utf-16, GBK

主要介绍了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"中文"
a_gb2312 = a.encode('gb2312')
print a_gb2312

GBK 与 GB2312的区别

GB 码,全称是GB2312-80《信息交换用汉字编码字符集基本集》,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。P- Windows3.2和苹果OS就是以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码、但兼容支持GB2312。GB码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755,以拼音排序,二级字3008,以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了很大作用。

GBK编码是中国大陆制订的、等同于UCS的新的中文编码扩展国家标准。GBK工作小组于1995年10月,同年12月完成GBK规范。该编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。

GBK 包括 GB2312的所有编码,有些字GB2312没有,需要用GBK来编码。

转: gbk, gb2312,big5,unicode,utf-8,utf-16的区别

其它编码(utf-8,GBK)转换为unicode

例如:a为gb2312编码,要转为unicode. unicode(a, 'gb2312')或a.decode('gb2312')

# -*- coding=gb2312 -*-
a = u"中文"
a_gb2312 = a.encode('gb2312')
print a_gb2312
 
a_unicode = a_gb2312.decode('gb2312')
assert(a_unicode == a)
a_utf_8 = a_unicode.encode('utf-8')
print a_utf_8

非unicode编码之间的转换

编码1(GBK,GB2312) 转换为 编码2(utf-8,utf-16,ISO-8859-1)

可以先转为unicode再转为编码2

如gb2312转utf-8

# -*- coding=gb2312 -*-
a = u"中文"
a_gb2312 = a.encode('gb2312')
print a_gb2312
 
a_unicode = a_gb2312.decode('gb2312')
assert(a_unicode == a)
a_utf_8 = a_unicode.encode('utf-8')
print a_utf_8

判断字符串的编码

isinstance(s, str) 用来判断是否为一般字符串 
isinstance(s, unicode) 用来判断是否为unicode 
如果一个字符串已经是unicode了,再执行unicode转换有时会出错(并不都出错) 

下面代码为将任意字符串转换为unicode

def u(s, encoding):
    if isinstance(s, unicode):
        return s
    else:
        return unicode(s, encoding)

unicode 与其它编码之间的区别

为什么不所有的文件都使用unicode,还要用GBK,utf-8等编码呢?

unicode可以称为抽象编码,也就是它只是一种内部表示,一般不能直接保存。
保存到磁盘上时,需要把它转换为对应的编码,如utf-8和utf-16。

其它方法

除上以上的编码方法,在读写文件时还可以使用codecs的open方法在读写时进行转换。

命令行默认编码检测和设置

可以用python自带的模块locale来检测命令行默认编码和设置命令行编码。

import locale
 
#get 
locale.getdefaultlocale()
#('zh_CN', 'cp936')
 
#set
locale.setlocale(...)

汉字转Unicode编码

    pd_name = pd_name.decode('utf-8')
    print pd_name
    nname = ""
    for c in pd_name:
      c = "%%u%04X" % ord(c);
      nname += c
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python编码转换函数来将GBK编码转换UTF-8编码。具体步骤如下: 1. 读取GBK编码文件或字符串,使用`open()`函数打开文件时指定编码为'GBK',或者使用`decode()`方法将字符串从GBK编码转换Unicode编码。 2. 使用`encode()`方法将Unicode编码的字符串转换UTF-8编码,或者使用`write()`方法将UTF-8编码的字符串写入文件中。 示例代码: ```python # 读取GBK编码文件转换UTF-8编码 with open('file.txt', 'r', encoding='GBK') as f: content = f.read() utf8_content = content.encode('utf-8') # 或者使用下面的语句将UTF-8编码的字符串写入文件中 # with open('file_utf8.txt', 'w', encoding='utf-8') as f: # f.write(utf8_content) # 将GBK编码的字符串转换UTF-8编码 gbk_str = '中文' unicode_str = gbk_str.decode('gbk') utf8_str = unicode_str.encode('utf-8') ``` ### 回答2: Python 是一种优秀的编程语言,因其简单易学、灵活性好、可读性强等诸多优点被广泛应用于各类项目开发。但是,在不同的平台、电脑、环境下,系统默认的编码格式也是不同的。很多时候,我们可能会需要对一些数据进行编码格式的转换,将GBK编码的数据转成UTF-8编码的数据。那么,Python 怎么把GBK改成UTF-8呢? 方法一:使用codecs模块 1. 打开需要转换文件,使用codecs模块的open()方法进行读取 ``` import codecs f = codecs.open('example.txt', 'r', 'gbk') text = f.read() ``` 这段代码中的'example.txt'就是需要转换编码格式的文件,'gbk'表示该文件编码格式。 2. 使用codecs模块的open()方法进行写入 ``` f = codecs.open('example.txt', 'w', 'utf-8') f.write(text) f.close() ``` 这段代码中的'utf-8'表示想要转换成的编码格式。将读取到的text文本数据按照UTF-8格式重新写入example.txt文件中即可完成编码格式的转换。 方法二:使用encode()和decode()方法进行转换 1. 打开需要转换文件,使用Python自带的open()方法进行读取 ``` f = open('example.txt', 'r') text = f.read().decode('gbk') ``` 这段代码中的'example.txt'就是需要转换编码格式的文件,'gbk'表示该文件编码格式。使用read()方法读取文件内容,在使用.decode()方法进行解码转化。 2. 使用.encode()方法进行编码转换,然后写入文件中 ``` f = open('example.txt', 'w') f.write(text.encode('utf-8')) f.close() ``` 这段代码中的'utf-8'表示想要转换成的编码格式。使用.encode()方法对文本数据进行编码转换,然后再用.write()方法将转换后的数据写入文件中即可完成编码格式的转换。 以上就是PythonGBK改成UTF-8的两种方法。总体而言,第一种方案使用的codecs模块的读写方式更加简单清晰,代码量较小;第二种方案是常规的编码转换方式,如果对Python相关知识较为熟悉的话,也可以采用该方法。无论采用哪种方式,我们都可以在Python中轻松实现对数据编码格式的转换,更好地应对不同的需求场景。 ### 回答3: Python提供了很多函数和库来处理字符编码转换问题。将GB2312或GBK编码的字符串转换UTF-8编码的字符串可以使用以下步骤: 1. 读取GB2312或GBK编码文件并用“rb”模式打开。 2. 使用Python内置的codecs模块来进行编码转换操作。例如,要将GB2312编码的文本编码UTF-8,请执行以下操作: ``` import codecs # 读取 GB2312 文件转换UTF-8 编码 with codecs.open('gb2312.txt', 'r', 'gb2312') as f: text = f.read() utf8_str = text.encode('utf-8') ``` 在上面的代码中,codecs.open()函数用于打开文件并指定文件编码格式。在此例中,使用“gb2312”指定GB2312编码格式。 要将文本从GB2312编码转换UTF-8编码,我们使用了Python的字符串编码转换功能。在这里,使用str.encode()函数将字符串从GB2312编码转换UTF-8编码。 3. 将编码转换后的UTF-8字符串写入新的文件并用“wb”模式打开。例如,要将转换后的UTF-8编码的字符串写入新文件,请执行以下操作: ``` import codecs # 读取 GB2312 文件转换UTF-8 编码 with codecs.open('gb2312.txt', 'r', 'gb2312') as f: text = f.read() utf8_str = text.encode('utf-8') # 将转换后的 UTF-8 字符串写入新文件 with codecs.open('utf8.txt', 'w', 'utf-8') as f: f.write(utf8_str) ``` 在上面的代码中,我们将新文件的名称指定为“utf8.txt”,并使用同样的方法使用codecs.open()打开文件。然后,我们使用str.encode()函数将字符串从GB2312编码转换UTF-8编码,并将转换后的字符串写入新文件。 以上就是将GB2312编码的文本转换UTF-8编码的所有步骤。在Python中,还有很多其他的工具和库可以用于字符编码转换问题,例如iconv、chardet等等。只需要选择适合自己需求的工具和库, 就能够轻松处理各种字符编码转换问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值