我是靠谱客的博主 落寞手链,最近开发中收集的这篇文章主要介绍Python处理中文语言——读取中文,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文解决问题:

1、导入中文txt文本,并转换为unicode

2、导入包含中文的py file


-----------------------------------解决问题一:导入中文txt文本,并转换为unicode-----------------------------------

基础概念

1、unicode、UTF-8

简单理解,unicode是一种处理所有非英文语言的编码方式,即将每个语言中的每个文字设置成不同的数字,避免造成混乱。unicode目前覆盖了世界上的主流语言,有超过一百多万个编号。UTF-8是实现unicode的一种方式。ASCII是不同于unicode的另外一种编码方式。详细介绍可见参考文章1。

2、encoding

将文本转化为数字的一系列规则叫作encoding。


核心代码

string.decode(*encoding*)   # from <type 'str'> to <type 'unicode'>
unicode.encode(*encoding*)   # from <type 'unicode'> to <type 'str'>


执行步骤:

1、将原始文本的编码方式保存为utf-8格式。

2、在python程序中导入文本

fr = open('all.txt','r')   #读写模式:r-只读;r+读写;w-新建(会覆盖原有文件);更多信息见参考文章2
all_utf8 = fr.read()
all_utf8   #屏幕上会出现类似“xe86xe95xa3”的文字</span>
3、将 原始文本的编码方式解码,即 转换为unicode。可使用下面两种方式的任意一种。

all_uni = all_utf8.decode("utf-8")

all_uni = unicode(all_utf8, 'utf-8')

4、比较转换前和转换后的文本

print all_utf8   #乱码
print all_uni   #中文


处理非英文文本,最重要的点是:

1、Decode early (尽早decode, 将文件中的内容转化成 unicode 再进行下一步处理)

def to_unicode_or_bust(obj, encoding='utf-8'):
	if isinstance(obj, basestring):   #检查是否为字符串
		if not isinstance(obj, unicode):   #检查编码是否为unicode
			obj = unicode(obj, encoding)   #使用UTF-8,将文本转换为unicode
	return obj
'''检查一个obejct是否是字符串,如是非unicode的字符串将其转换成unicode。'''

2、Unicode everywhere (程序内部处理都用unicode)

to_unicode_or_bust(all_utf8)

3、Encode late (最后encode回所需的encoding, 例如把最终结果写进结果文件)

file = open('all_out.txt','wb')   #创建一个all_out的txt文件
file.write(all_uni.encode('utf-8'))   #用utf-8编码方式保存all_uni
file.close()   #保存完毕


其它:

1、查看python默认的编码方式

import sys
sys.getdefaultencoding()   # 'ascii'

2、更改python默认的编码方式

sys.setdefaultencoding('utf-8')

3、使用codecs模块导入文档:用codecs提供的open方法,可以指定打开的文件的语言编码,并在读取的时候自动转换为unicode。

import codecs
file = open('all_out.txt', 'r', encoding = 'utf-8')

4、BOM

windows下加载文本,有时会出现BOM头,即在文件的开头有'特殊'的记号标识该文件属于UTF-8编码。

使用codecs模块,检查是否有BOM头的方法

fr = open('all.txt','r')
sample = fr.read(4)
sample.startswith(codecs.BOM_UTF16_LE) or sample.startswith(codecs.BOM_UTF16_BE)

UTF-16格式的文本在decode是会自动删除BOM;UTF-8文本删除BOM使用如下代码

string.decode('utf-8-sig')


--------------------------------------------解决问题二:导入包含中文的py file--------------------------------------------

Python默认使用ASCII编码作为标准编码方式,所以需要在文档的第一行或第二行注明我们的编码方式。

核心代码(标注方式)

# coding=<encoding name>
或者

#!/usr/bin/python
# -*- coding: <encoding name> -*-
或者

#!/usr/bin/python
# vim: set fileencoding=<encoding name> :
这里只要符合正则表达式"^[ tv]*#.*?coding[:=][ t]*([-_.a-zA-Z0-9]+)"即可,所以等号也可以替换为冒号


执行步骤

1、在记事本中输入以下代码,使用ANSI格式保存,命名为test.py

# coding=UTF-8
s = "中文"
print s
2、在python中导入py file

import test

其它:

我们也可以使用普通文本来表示编码,例如在记事本中输入:

# This Python file uses the following encoding: utf-8
s = "中文"
print s



参考文章:

1、字符编码笔记:ASCII,Unicode和UTF-8

http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

2、python:open/文件操作

http://www.cnblogs.com/dkblog/archive/2011/02/24/1980651.html

3、Python处理中文的时候的一些小技巧

http://coolshell.cn/articles/461.html

4、PEP 263 -- Defining Python Source Code Encodings

https://www.python.org/dev/peps/pep-0263/

最后

以上就是落寞手链为你收集整理的Python处理中文语言——读取中文的全部内容,希望文章能够帮你解决Python处理中文语言——读取中文所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部