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
相关产品推荐
相关产品推荐

