标题:python3.x中文编码转换的问题
只看楼主
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
结帖率:91.53%
 问题点数:0 回复次数:3 
python3.x中文编码转换的问题
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不明白,怎么转换也不行,在命令提示符中,看到的是乱码不是中文。怎么办啊?
谢谢各位高手的指教。
搜索更多相关主题的帖子: python3 中文 Label text 显示 
2017-07-23 06:07
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
得分:0 
问题已解决!
解决过程:
前几天学“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却是有区分的。就是这个诱因,导致我绕了这么大的圈子,还浪费了一天多的时间。。。。。。

不过,关于编码转换,还是没学明白。。。。。。

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2017-07-23 23:01
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
得分:0 
程序代码:
#!/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()

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2017-07-23 23:08
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
得分:0 
如果在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()

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2017-07-23 23:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-479560-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080501 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved