Python输出中文到文件时的字符编码问题

今天在使用Python的GUI平台wxPython时,写了一个只有打开、编辑、保存功能的简易笔记本,代码如下:

 1 #coding:utf-8
 2 import wx
 3
 4 def load(event):
 5     f = open(FileName.GetValue())
 6     Contents.SetValue(f.read())
 7     f.close()
 8
 9 def save(event):
10     f = open(FileName.GetValue(), ‘w‘)
11     f.write(Contents.GetValue())
12     f.close()
13
14 app = wx.App()
15 win = wx.Frame(None, title = "Simple Editor", size = (410, 335))
16 bkg = wx.Panel(win)
17
18 LoadButton = wx.Button(bkg, label = "Open")
19 LoadButton.Bind(wx.EVT_BUTTON, load)
20 SaveButton = wx.Button(bkg, label = "Save")
21 SaveButton.Bind(wx.EVT_BUTTON, save)
22 FileName = wx.TextCtrl(bkg)
23 Contents = wx.TextCtrl(bkg, style = wx.TE_MULTILINE | wx.HSCROLL)
24
25 hbox = wx.BoxSizer()
26 hbox.Add(FileName, proportion = 1, flag = wx.EXPAND)
27 hbox.Add(LoadButton, proportion = 0, flag = wx.LEFT, border = 5)
28 hbox.Add(SaveButton, proportion = 0, flag = wx.LEFT, border = 5)
29
30 vbox = wx.BoxSizer(wx.VERTICAL)
31 vbox.Add(hbox, proportion = 0, flag = wx.EXPAND | wx.ALL, border = 5)
32 vbox.Add(Contents, proportion = 1, flag = wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT,
33          border = 5)
34
35 bkg.SetSizer(vbox)
36 win.Show()
37
38 app.MainLoop()

但是在使用过程中输入中文保存时,控制台报错:

Traceback (most recent call last):
File "D:\coding_file\python_file\TestPython\src\Test\test1.py", line 11, in save
f.write(Contents.GetValue())
UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-5: ordinal not in range(128)

由于Python默认使用不支持Unicode的中文编码,所以需要手动设置编码如utf-8,改动如下:

1 import wx, sys
2 reload(sys)
3 sys.setdefaultencoding(‘utf-8‘)

这样就可以输入中文并保存了,其中要特别注意 reload(sys) 这一行代码

reload()函数将以前导入过的模块再加载一次。重新加载(reload)包括最初导入模块时应用的分析过程和初始化过程。这样就允许在不退出解释器的情况下重新加载已更改的Python模块,从而改变字符集编码,问题解决。

时间: 2024-11-08 15:05:49

Python输出中文到文件时的字符编码问题的相关文章

Python读取中文txt文件错误:UnicodeEncodeError: 'gbk' codec can't encode character

1 with open(file,'r') as f: 2 line=f.readline() 3 i=1 4 while line: 5 line=line.decode('utf-8') 6 print str(i)+": "+line7 line=f.readline() 8 i=i+1 用以上代码读取一个包含中文的txt文件时,在正确地读取并打印了六百多行之后,print str(i)+": "+line这一行报错: UnicodeEncodeError:

python输出中文——如何在Windows控制台打印不乱码

文章介绍 用Python在控制台打印中文如何不会乱码,一直是困扰很多Pythoner的问题,甚至很多Python老手也经常犯难.原因就在于从一般网页.数据库或文本外来数据源上抓取过来的内容,需要经过正确的编解码才可以正常输出,而Python的编解码机制比较复杂,没有深入思考的话经常遇到调试错误.这篇文章介绍了最常见的几种输出中文的情况,编译平台为Windows控制台,Python版本为2.7.9 文章中一些内容参考了点击打开链接 感谢原作者分享. 预备知识 str和unicode 首先需要弄清楚

python学习笔记第四节(字符编码+文本操作+函数)

python中不存在常量这个意义只能用大写命名来说明这个赋值是个常量,实际均为变量 字符编码 内存中是unicode硬盘中是utf-8中间需要转换 python只有执行的时候才有字符编码的概念python2默认ascii码python3默认unicode 文件操作 写操作,w 没有就新建有则覆盖,a是追加 name 查看文件名encoding 查看字符编码 查看是否可读查看是否可写 true false 以文件字符来显示 seek 移动光标位置,以文件起始来读,字节,以0为单位utf-8三个字符

开发技术--浅谈文件操作与字符编码

开发|浅谈文件操作与字符编码 听说Python的文件操作很容易在某一些电脑上出问题,然而罪魁祸首就是字符编码.让我们来了解一些底层的编码方式. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式,解读知识点.力求通俗易懂,完美透析知识. 正文 本文主要分为两大部分,一部分是如何使用Python进行文件操作,另一部分是聊一下字符编码的那些事.(比较绕,尽量用最最最通俗的话表述~~) 文件操作 1.文件操作方式 open(

python Day3 集合 文件处理 函数 字符编码 递归 高级函数

集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时

python学习笔记(集合的使用、文件操作、字符编码与转码、函数)

集合 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员 为什么需要集合? 集合的作用 1 .列表去重复数据 按照现有知识的解决思路:先设置空列表,然后使用for寻获,把需要去重的列表的第一个数据放到新列表中,然后依次取出第二个数据,把第二个数据和第一个数据作比较,如果不一样,则存入新列表中:以此类推,每取一次都要和新列表中的数据作对比,不一样的则添加入新列表中. 2. 关系测试 比如有学员同时报了python班和l

python集合、文件处理、字符编码

1. 集合操作 : 去重 {1, 2, 3, 4, 5, 6, 7, 8, 9} 1 list1 = [1,2,3,4,5,5,6,7,8,9] 2 list1 = set(list1) 3 print(list1) 1.1 集合语法里有个intersection是求两个集合之间的交集 1 list1 = [1,2,3,4,5,5,6,7,8,9] 2 list1 = set(list1) 3 print(list1) 4 5 list2 = set([0,1,2,3,44,44,55,555,

Python基础3 文件操作、字符编码与转码

文件操作 对文件操作过程 打开文件,得到文件句柄赋值给变量 操作 关闭文件 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U "b

Ubuntu下,python输出中文

python教程里说,如果要输出非英语文本就加前缀u或U, 例如: print u"你好啊,祖国" print u"こんにちは.私はとてもいいです" 结果会报错:SyntaxError: Non-ASCII character '\xe4' in file...... 解决的方法是: #!/usr/bin/python#coding:utf-8print "こんにちは.私はとてもいいです"print "这是中文,哈哈哈" 或者