首页 > 编程语言 > 详细

python cmd 窗口 中文乱码 解决方法

时间:2019-07-19 17:14:33      阅读:90      评论:0      收藏:0      [点我收藏+]

python cmd 窗口 中文乱码 解决方法

前言

在 python 开发中,有时候想通过cmd窗口来和用户交互,比如显示信息之类的,会比自己创建 GUI 来的方便,但是随之而来的就是编码乱码问题

下面例子在 python2 和 python3 中都可以运行,也可以在其它 .py 中通过 import os;os.startfile(ur"xxx.bat") 来运行

之前一直遇到一个问题,通过双击 bat 文件来运行,可以不用转码,只要 cmd 窗口的活动页编码是 936 就可以了,但是在其它 py 文件中运行那个 bat,就会出现乱码,所以转码后可以一保正常

双击 .bat 来运行 py

@echo off
chcp 936>nul
python d:\test.py exit
# -*- coding: utf-8-*-

import sys
import os

input_ = input
zh_coding = cp936
utf_8 = utf-8

# before other codes
if sys.version_info.major < 3:
    reload(sys)
    sys.setdefaultencoding(utf_8)
    
    input_ = raw_input

# begin your code

def to936(utf8):
    if sys.version_info.major < 3:
        utf8 = utf8.decode().encode(zh_coding)
    return utf8

def toUtf8(zh936):
    if sys.version_info.major < 3:
        zh936 = zh936.decode(zh_coding).encode(utf_8)
    return zh936

os.system(@echo off)
# 转换cmd窗口的编码集,不管cmd窗口的默认值是什么都显示正确
os.system(chcp 936 >nul)

print(to936(u中文简体(encoding)))
print(to936(u中文繁體(encoding)))

# 在 cmd 窗口 的默认值的默认代码页不是 936 的情况下会报错。
# 如果是 936,通过双击 .bat 运行是正常的,
# 如果在其它 py 中通过 os.startfile(), subprocess, os.system()
# 等模块来运行那个bat,会显示乱码
try:
    print(u中文简体(not encoding))
    print(u中文繁體(not encoding))
except Exception as e:
    os.system(to936(uecho 解码错误))
    print(e)

i = input_(to936(u输入你的中文名字:))
i = toUtf8(i)
msg = to936(u你的中文名字是:%s % i)
print(msg)

os.system(pause && exit)

 

python cmd 窗口 中文乱码 解决方法

原文:https://www.cnblogs.com/ibingshan/p/11214175.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!