You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'가다')

四、避坑提醒

  1. 源码文件要加编码声明:如果你的.py文件里直接写了韩文,一定要在文件最开头加这句,告诉Python用UTF-8解析源码:

    # -*- coding: utf-8 -*-
    

    不然Python 2.7会默认用ASCII解析,直接报错。

  2. 别乱用sys.setdefaultencoding:这个方法看起来能改全局编码,但其实会影响很多第三方库的行为,而且在Python启动后某些模块加载完再设置就晚了,不如显式处理编码转换靠谱。

  3. 尽量用Unicode字符串处理文本:所有涉及韩语文本的操作,都先用带u前缀的Unicode字符串(比如u'가다'),最后再根据需求编码成字节串(比如写入文件或输出到终端),这样能减少编码混乱。

内容的提问来源于stack exchange,提问作者vulhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:49:58