如何修复Python中codecs.charmap_encode的UnicodeEncodeError错误
UnicodeEncodeError 解决办法
问题背景
运行以下代码时,print语句触发编码错误:
def __on_comment(self, video_id, comment): self.producer.send('comments', bytes('{}\t{}'.format(video_id, comment), encoding='utf-8')) print(video_id, comment)
错误信息:
line 17, in __on_comment
print(video_id, comment)
File "C:\Users\Hillary\AppData\Local\Programs\Python\Python310\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2764' in position 0: character maps to
原因是Windows默认控制台编码为cp1252,无法识别部分Unicode字符(如示例中的❤️)。
解决方法
1. 给print添加错误处理参数
直接在print时指定无法编码字符的处理逻辑,替换或忽略:
# 用?替换无法编码的字符 print(video_id, comment, errors='replace') # 或者直接忽略无法编码的字符 # print(video_id, comment, errors='ignore')
2. 强制控制台使用UTF-8编码
在代码开头插入以下代码,重定向标准输出为UTF-8编码:
import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8') sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')
3. 使用支持UTF-8的终端工具
替换默认的cmd终端为Windows Terminal、PowerShell 7+等工具,这些终端默认支持UTF-8编码,不会出现此类问题。
内容的提问来源于stack exchange,提问作者hillz
相关产品推荐
相关产品推荐

