Python读取CSV文件中Unicode emoji编码异常求助:无法正常显示emoji
解决CSV文件中Unicode Emoji编码问题
你的核心问题是CSV中的内容是Python风格的字符串字面量(包含u""、u''或未加引号的转义序列),直接读取后这些只是普通字符串,不会自动解析为Emoji字符。下面是具体的解决方案:
问题分析
你CSV里的条目比如u"\U0001f3c6 Campaign for you"并不是直接的Emoji文本,而是Python代码里的字符串写法。用csv.reader读取时,它会被当作普通字符串处理,所以\U0001f3c6不会转换成对应的🏆 emoji。
解决方案
使用ast.literal_eval()安全解析字符串字面量,或者针对无引号的转义序列用unicode-escape解码,将其转换为真正的Unicode字符串。修改代码如下:
import csv import ast def emojis(): file_ = "./Subjects/Subjects.csv" # 按需调整路径 with open(file_, 'r', encoding='utf-8') as csv_: data = dict(csv.reader(csv_, delimiter=',')) parsed_data = {} for key, value in data.items(): try: # 处理带u""、u''包裹的字符串字面量 parsed_value = ast.literal_eval(value) except (SyntaxError, ValueError): # 处理无引号的转义序列(如Subject2、Subject4) parsed_value = value.encode('utf-8').decode('unicode-escape') parsed_data[key] = parsed_value # 验证输出 for key, content in parsed_data.items(): print(f"{key}: {content}") emojis()
关键说明
ast.literal_eval(): 安全解析Python合法的字面量,能正确识别u""/u''包裹的字符串,将\U0001f3c6转换为对应Emoji。unicode-escape解码: 针对没有引号包裹的转义序列,直接将字符串中的Unicode转义码转换为实际字符。- 指定文件编码: 用
encoding='utf-8'打开文件,确保文件内容被正确读取为Unicode字符串。
执行上述代码后,所有Emoji都会正常显示。
内容的提问来源于stack exchange,提问作者entity wor
相关产品推荐
相关产品推荐

