Python 2.7在Windows 10下韩文显示为问号的问题求助
解决Windows 10下Python 2.7韩语文本显示问号的问题
嘿,我之前在Windows上用Python 2.7处理韩文这类非ASCII字符时也踩过一模一样的坑,咱们一步步拆解问题来解决:
一、先搞懂核心原因
Python 2.7的字符串体系分字节串(不带u前缀)和Unicode字符串(带u前缀),而Windows终端默认编码是cp936(GBK),和韩文的编码cp949不匹配;另外文件写入时如果不指定编码,会用系统默认编码,很容易导致乱码或问号。
二、终端显示问号的解决办法
方法1:临时修改终端编码
打开命令提示符后,先执行这条命令切换到韩文编码:
chcp 949
之后再运行Python脚本或直接在交互模式下输入print u'가다',应该就能正常显示韩文了。
方法2:在Python代码中强制设置输出编码
如果不想每次手动改终端编码,可以在代码里把stdout的编码强制设为cp949:
import sys import codecs # 把标准输出的编码改成韩文终端支持的cp949 sys.stdout = codecs.getwriter('cp949')(sys.stdout) print u'가다' # 现在应该能正常显示了
三、文件写入问号的解决办法
写入文件时绝对不要依赖默认编码,一定要显式指定编码(推荐用UTF-8,兼容性最好):
方法1:手动编码Unicode字符串后写入
# 先定义Unicode字符串 korean_text = u'가다' # 打开文件时,把Unicode编码成UTF-8字节写入 with open('output.txt', 'wb') as f: f.write(korean_text.encode('utf-8'))
方法2:用codecs.open直接指定编码
这个方法更省心,直接处理Unicode字符串,不用手动编码:
import codecs with codecs.open('output.txt', 'w', encoding='utf-8') as f: f.write(u'가다')
四、避坑提醒
源码文件要加编码声明:如果你的.py文件里直接写了韩文,一定要在文件最开头加这句,告诉Python用UTF-8解析源码:
# -*- coding: utf-8 -*-不然Python 2.7会默认用ASCII解析,直接报错。
别乱用
sys.setdefaultencoding:这个方法看起来能改全局编码,但其实会影响很多第三方库的行为,而且在Python启动后某些模块加载完再设置就晚了,不如显式处理编码转换靠谱。尽量用Unicode字符串处理文本:所有涉及韩语文本的操作,都先用带
u前缀的Unicode字符串(比如u'가다'),最后再根据需求编码成字节串(比如写入文件或输出到终端),这样能减少编码混乱。
内容的提问来源于stack exchange,提问作者vulhar
相关产品推荐
相关产品推荐

