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

Python 2.6.6中split函数返回结果的中文字符显示问题求助

解决Python 2.6.6中split后中文字符显示Unicode编码的问题

我明白你碰到的麻烦了——在Python 2.6.6里用codecs.open读带中文的文件,直接print行内容能正常显示汉字,但split之后打印列表,中文就变成u'\xe5\x8b\x80'这种Unicode转义格式了。这其实是Python 2.x里unicode和str对象的显示机制搞的鬼,咱们来一步步解决它:

问题根源

在Python 2.x中,codecs.open以utf-8编码读取文件时,返回的每一行都是unicode对象。当你直接print(line)时,Python会自动把这个unicode对象编码成终端支持的编码(比如UTF-8),所以汉字能正常显示。但当你打印包含unicode对象的列表时,Python会输出每个元素的repr()形式——也就是用来表示对象的“官方字符串”,所以就出现了Unicode转义码,而不是实际的汉字。

解决方案

咱们只需要把split得到的unicode元素手动编码成字符串(str对象)再输出就行,这里给你几种实用的方法:

方法1:列表推导式编码所有元素

这是最直接的方式,遍历split后的列表,把每个unicode元素转成UTF-8编码的字符串:

import codecs
with codecs.open('scnd_dic.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(line)
        split_result = line.split()
        # 将每个unicode元素编码为utf-8字符串
        encoded_result = [item.encode('utf-8') if isinstance(item, unicode) else item for item in split_result]
        print(encoded_result)

运行后你会看到输出是['勀', 'KE4'],中文正常显示。

方法2:自定义格式化输出

如果想让输出更贴近原列表的格式,也可以手动拼接成类似列表的字符串:

import codecs
with codecs.open('scnd_dic.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(line)
        split_result = line.split()
        # 格式化输出成友好的列表样式
        formatted_output = '[{}]'.format(', '.join("'{}'".format(item.encode('utf-8')) if isinstance(item, unicode) else repr(item) for item in split_result))
        print(formatted_output)

方法3:直接打印分割后的元素

如果不需要列表格式,直接打印每个元素的话更简单:

import codecs
with codecs.open('scnd_dic.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(line)
        split_result = line.split()
        print('分割结果:', ' '.join(item.encode('utf-8') for item in split_result))

小提示

Python 2.6.x确实比较老旧了,unicode和str的区分非常严格,记住一个关键点:单个unicode对象print时会自动编码,但容器(列表、字典等)里的unicode对象会显示repr形式,所以只要把unicode转成str(通过encode('utf-8'))就能正常显示汉字啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:26:28