使用Python的requests、ics库导入含希伯来文的ics文件出现乱码如何解决
ics文件希伯来语内容乱码修复方案
问题原因
requests库默认会根据HTTP响应头的Content-Type字段自动猜测文本编码,如果目标日历服务未返回正确的charset参数,requests会默认使用ISO-8859-1编码解析内容。而ICS格式规范默认采用UTF-8编码存储多语言内容,希伯来语属于非拉丁字符集,用错误编码解析后就会出现乱码。另一个同语言日历显示正常,是因为对应服务正确返回了UTF-8编码标识。
修复方案
调整请求后的解码逻辑,强制使用UTF-8解析响应内容即可,以下两种写法均可:
写法1:显式指定requests响应编码
import requests as rq from ics import Calendar url = "https://example.com/cal/" resp = rq.get(url) resp.encoding = 'utf-8' c = Calendar(resp.text) for event in c.events: print(event)
写法2:直接用字节流手动解码(更稳妥)
直接读取响应的原始字节流,手动用UTF-8解码,不受响应头错误编码标识的影响:
import requests as rq from ics import Calendar url = "https://example.com/cal/" c = Calendar(rq.get(url).content.decode('utf-8')) for event in c.events: print(event)
本地ics文件处理注意点
如果是读取本地存储的ics文件,打开时也要指定UTF-8编码:
with open('calendar.ics', 'r', encoding='utf-8') as f: c = Calendar(f.read())
内容的提问来源于stack exchange,提问作者Aa me
相关产品推荐
相关产品推荐

