在Python中解决中英文混杂出错的问题

开发 后端
本文将解决一个在使用Python过程中,碰到中文就出错的问题。希望能对大家碰到同类问题时,有所帮助。

前两天用Python写了个小脚本,其中有个需求是从一个文本文件A中读取数据,然后处理一下写进一个新的文本文件B中。不过A文件中既有英文也有中文。
写出处理这个需求的代码并不复杂,随手就能写下类似的代码:

1def write_a_line(line, fp):
2    fp.write(line)

不过这段程序一旦碰到有汉字的字符串时,可能就会遇到下面的问题:

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:

ordinal not in range(128)

恩,这种情况对于我们平时使用C#或者Java的程序员来说确实比较头大。从这个错误提示来看,Python在写文件时,对line变量进行了编码操作,而且是针对line对象进行ASCII码的编码。

我们都知道Python是支持unicode的,而且还有针对unicode的类型“unicode”。要想让字符串称为unicode字符串,可以在字符串的引号前面加入一个小写字母“u”。翻阅Python的文档,我们可以发下write方法接收的是str对象。不过Python并不像C#,它不用声明变量的类型。所以我们应该先看看line到底是个什么对象。于是为了解决这个问题,我把上面的代码加了一行:

1def write_a_line(line, fp):
2    print line.__class__.__name__
3    fp.write(line)

代码运行之后,我发现当line中有中文的时候,我们的line变量的类型是unicode。从网上搜了一下与unicode与写文件相关的帖子,可以得到一个信息,对这unicode对象调encode方法进行编码就可以正常写文件了。于是代码又编程了下面的样子:

1def write_a_line(line, fp):
2    if line.__class__.__name__ == “unicode”:
3        line = line.encode(“GB2312”)
4    fp.write(line)

这里要注意的问题是不能一棍子打死,line可能会是unicode对象也可能是str对象,不过我们只对unicode对象进行编码。这下问题总算是解决了。

【编辑推荐】

  1. Python异常处理体系简介
  2. 使用Oracle数据库实现Python数据持久
  3. 学习使用 Python 编写插件
责任编辑:彭凡 来源: 博客园
相关推荐

2010-04-06 09:33:37

CentOS系统

2015-12-01 11:17:41

Windows 10Version 151镜像

2013-06-21 10:48:18

WP7Windows Pho中英文互翻译

2015-08-18 15:19:51

2021-10-26 06:34:12

系统设计服务

2009-10-20 14:07:00

CCIE必读书籍

2009-08-13 09:26:14

.NET正则表达式

2009-02-18 22:06:38

Windows 7中英文2in1安装盘

2010-04-08 09:33:05

微软Bing必应

2010-02-05 09:57:25

C++中英文字符串

2013-05-31 00:35:05

2021-10-15 15:26:10

AI 数据人工智能

2023-08-09 10:08:00

模型AI

2020-07-16 13:00:18

人工智能机器学习技术

2020-07-20 09:49:56

开源技术 趋势

2020-06-08 11:16:06

百度

2023-12-25 13:24:00

模型OCR页面

2021-12-10 19:26:43

Python脚本电子书

2009-09-22 16:23:52

搜索引擎

2022-02-20 19:06:42

SSL/TLSLinux
点赞
收藏

51CTO技术栈公众号