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

UnicodeEncodeError报错及Python文件读写write语句位置咨询

问题解决与代码修正

1. 解决Unicode编码错误

你遇到的UnicodeEncodeError是因为写入文件时使用了系统默认的charmap编码,这种编码无法处理\u20ab这类特殊Unicode字符。解决方法很简单,打开输出文件时指定utf-8编码即可,同时读文件时也建议指定编码避免读取异常:

# 读文件指定UTF-8编码
f = open('data/secret_message.txt', 'r', encoding='utf-8')
# 写文件指定UTF-8编码
output_file = open('data/secret_message_decoded.txt', 'w', encoding='utf-8')

2. 修正循环逻辑问题

原代码的while循环存在逻辑混乱:

  • 重复调用decode(line)并打印两次,完全冗余
  • 先打印解码内容再判断是否到文件末尾,导致文件结束时会多打印一次空内容
  • 虽然output_file.write的位置不会导致漏写,但逻辑顺序不合理

调整后的循环应该先判断是否读到空行(文件末尾),再处理有效行,且只解码一次:

while True:
    line = f.readline()
    if line == '':
        break
    decoded_line = decode(line)
    print(decoded_line)
    output_file.write(decoded_line)

3. 完整修正后的代码

def decode(encoded_str):
    decoded_str = ''
    for char in encoded_str:
        decoded_str += chr(ord(char)-1)
    return decoded_str

print("Test:", decode('Hp Jsjti')) # 输出 Go Irish
print('\n')

# 指定UTF-8编码读写文件
f = open('data/secret_message.txt', 'r', encoding='utf-8')
output_file = open('data/secret_message_decoded.txt', 'w', encoding='utf-8')

# 逐行读取处理
while True:
    line = f.readline()
    if line == '':
        break
    decoded_line = decode(line)
    print(decoded_line)
    output_file.write(decoded_line)

f.close()
output_file.close()

可选优化

解码函数可以简化成更高效的写法:

def decode(encoded_str):
    return ''.join(chr(ord(char)-1) for char in encoded_str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:35:11