注册 登录
编程论坛 Python论坛

python3.x中文编码转换的问题

不懂才问 发布于 2017-07-23 06:07, 5026 次点击
from tkinter import *
root=Tk()
root.title('测试程序')
root.geometry('300x200+100+100')
Label(root,
    text='此程序的意图是Python3.x将文件保存为UTF-8格式,').pack()
Label(root,
    text='在Thinter窗口中能够显示中文,').pack()
Label(root,
    text='并且,在命令提示符状态也能看到中文调试信息。').pack()
def showDebugMsg():
    promptShowMsg='显示控制台的调试信息'
    print(promptShowMsg.encode('utf-8').decode('cp936'))
Button(root,
    text='显示调试信息',
    command=showDebugMsg).pack()
root.mainloop()

上面代码中,encode和decode不明白,怎么转换也不行,在命令提示符中,看到的是乱码不是中文。怎么办啊?
谢谢各位高手的指教。
3 回复
#2
不懂才问2017-07-23 23:01
问题已解决!
解决过程:
前几天学“TKinter编程代码实例.pdf”,是基于Python2.5的,学到一半,Text控件学懵了。想换本“辛星tkinter第二版”看看,却是基于Python3.2.5的。
之前都是右键新建个文本文件改名为XXX.py,输入完代码,就在命令提示符里,用python XXX.py调试。
结果到3.2.5中显示“SyntaxError: Non-UTF-8 code starting with '\xb2' in file test.py on line 8”之类的信息。
百度相关文章,找个这个变量设置:
只有本站会员才能查看附件,请 登录

但仍未解决问题。放在一边,,,

突然想起应该把文件保存为UTF-8格式。程序能运行了,但控制台输入的调试信息显示乱码。又百度各种文章各种试,encode,decode,unicode,各种尝试,都试懵了,问题仍然没有解决。
精简Win7的原因?最新3.6.2有没有解决这个问题呢?各种猜测。
虚拟机,装了一个MSDN的Win7,复制了两份。一个是Python3.25,一个是Python3.6.2。同样的代码,全都正常显示。再虚拟一个精简的Win7装Python3.2.5也正常显示。
最后想到了这个系统变量一直在那没删掉。
最后想想为什么废了这么大的周折,原来是:
只有本站会员才能查看附件,请 登录

辛星提到了他用的编辑器Sublime,是自动保存为UTF-8格式的,保存或另存为的时候,也没有ANSI或者UTF-8的编码选项。而我习惯用的EditPlus却是有区分的。就是这个诱因,导致我绕了这么大的圈子,还浪费了一天多的时间。。。。。。

不过,关于编码转换,还是没学明白。。。。。。
#3
不懂才问2017-07-23 23:08
程序代码:
#!/usr/bin/python
#
-*- coding:UTF-8 -*-
from Tkinter import *
import sys
print sys.version
def tkShowMsg(myMsg):
    strMsg=str(myMsg)
    return unicode(strMsg,'gb2312')
root=Tk()
root.title(tkShowMsg('测试程序'))
root.geometry('300x200+100+100')
Label(root, text=tkShowMsg('此程序的意图是Python2.x将文件保存为ANSI格式,')).pack()
Label(root, text=tkShowMsg('在Thinter窗口中能够显示中文,')).pack()
Label(root, text=tkShowMsg('并且,在命令提示符状态也能看到中文调试信息。')).pack()
def showDebugMsg():
    print '这是控制台显示的调试信息!'
Button(root, text=tkShowMsg('显示调试信息'), command=showDebugMsg).pack()
root.mainloop()

上面是Python2.X的,右键保存为普通格式(ANSI)的文本文档,就能正常运行的代码。
下面是Python3.X中需要将文件保存为UTF-8的编码格式,才能正常支行的代码。
程序代码:
from tkinter import *
import sys
print(sys.version)
def promptShowMsg(myMsg): #看来这个函数多余了
    strMsg=str(myMsg)
    return strMsg #.decode('gbk')
root=Tk()
root.title('测试程序')
root.geometry('400x200+100+100')
Label(root,text='此程序意图是将Python3.6.2编写的文件保存为UTF-8格式,').pack()
Label(root,text='在Thinter窗口中能够显示中文,').pack()
Label(root,text='并且,在命令提示符状态也能看到中文调试信息。').pack()
def showDebugMsg():
    print('这是没经过处理的调试信息!')
    print(promptShowMsg('这是控制台显示的调试信息!'))
Button(root, text='显示调试信息', command=showDebugMsg).pack()
root.mainloop()
#4
不懂才问2017-07-23 23:11
如果在Python3.x中习惯了右键新建一个文本文档,再改名为XXX.py,又没有另存为UTF-8
强制为GBK编码格式,也可以
程序代码:
#!/usr/bin/python
#
-*- coding:cp936 -*-
from tkinter import *
import sys
print(sys.version)
def promptShowMsg(myMsg): #看来这个函数多余了
    strMsg=str(myMsg)
    return strMsg #.decode('gbk')
root=Tk()
root.title('测试程序')
root.geometry('400x200+100+100')
Label(root,text='此程序意图是将Python3.6.2编写的文件保存为UTF-8格式,').pack()
Label(root,text='在Thinter窗口中能够显示中文,').pack()
Label(root,text='并且,在命令提示符状态也能看到中文调试信息。').pack()
def showDebugMsg():
    print('这是没经过处理的调试信息!')
    print(promptShowMsg('这是控制台显示的调试信息!'))
Button(root, text='显示调试信息', command=showDebugMsg).pack()
root.mainloop()
1