Python对中文字符的处理(utf-8/ gbk/ unicode)

现在在做分词的时候会处理大量有关中文字符的处理,经常输出乱码,老大让我暂时不考虑字符编码,但是为了看着爽不得不研究一下。

分词系统:NLPIR

因为不同的编译环境默认的汉字编码可能不一样,我的环境是OSX10.11 + Pycharm + python2.7

文件第一行永远默认

# coding: utf-8


数据集我用的是“tc-corpus-train”这个是数据,百度一下就能搜到,里面有20种文档,每个文档都是关于这个方面的小新闻,挺好用的。


#--------------------------------------------我是分割线--------------------------------------------#

环境说完了下面从我遇到的问题逐渐说说是怎么解决的:

1.什么是utf-8/ gbk/ unicode编码

我就通俗易懂的讲解一下吧,讲的复杂了肯定是没人看的

utf-8是Unix下的一种通用编码,可以对汉字编码,应该是Unix环境下能打开看到汉字的唯一编码(gbk试过,乱码,不知有没有人反驳我)

gbk是win环境下的一种汉字编码,其中GB2312编码也算是gbk编码,这种编码在Unix环境中打开是乱码,大概是这个样子:

可以看到,英文正常显示,但是汉字呢就gg了,一般看到这种跟个蛋一样的字符就是gbk汉字(只在mac中试过,别的Unix不知道是不是个蛋)

unicode是一种二进制编码,所有的utf-8和gbk编码都得通过unicode编码进行转译,说的直白一点,utf-8和gbk编码之间不能之间转换,要在unicode之间过个场才能转换。下面我图解一下,方便理解:

而在mac环境下pycharm只能显示来自unicode的汉字,举个例子:

# coding:utf-8

s = '我是一串汉字'
print s

首先,s是一串utf-8编码的汉字,在print的时候,先把utf-8转化成unicode再输出成正产显示的汉字。

如果打开一个文档,怎么看里面是什么编码的字呢?乱码是不是蛋已经无法满足一个有逼格程序员的要求了,请看下面:


2.如何查看文档、字符串编码格式

不废话,下面几行代码搞定:

# coding:utf-8

import chardet
s = '哈哈哈我就是一段测试的汉字呀'
print chardet.detect(s)

输出:{'confidence': 0.99, 'encoding': 'utf-8'}

这个办法只能输出这段字符可能的编码格式,我们看到0.99的可能是utf-8,其实也就是utf-8编码了,只要字符串够长,后面的置信度都是0.99


3.各种编码之间如何转换

python中有两个很好用的函数 decode() 和 encode()

decode(‘utf-8’) 是从utf-8编码转换成unicode编码,当然括号里也可以写'gbk'

encode('gbk') 是将unicode编码编译成gbk编码,当然括号里也可以写'utf-8'

假如我知道一串编码是用utf-8编写的,怎么转成gbk呢

s.decode('utf-8').encode('gbk')
像上面这样就可以了

图解一下:


4.我为什么要把编码转来转去

在使用NLPIR分词的时候,对输入文档的编码格式是有严格要求的,在函数初始化的时候可以设置输入源文档的编码格式。

但是源文档的编码可能一会儿是utf-8一会儿是gbk,这就要求统一一下格式,不能格式一乱就报错了,

具体操作我后面会写一篇python调用NLPIR的说明

  • 40
    点赞
  • 146
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值