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

Python 2.7.14中使用strptime处理法语日期格式遇阻

解决Python strptime解析法语Unicode日期字符串的问题

这个问题其实是strptime的特性导致的——它默认使用系统的**区域设置(locale)**来解析月份名称(%B对应的部分),而默认locale通常不是法语,所以没法识别Février这种带重音的法语月份名,再加上Unicode编码的小坑,就出现了你遇到的报错。下面是具体的解决方法:

第一步:先切换到法语区域设置

在调用strptime之前,必须先把时间相关的locale设置为法语,这样%B才能正确匹配法语的月份名称。不同系统的locale名称略有差异,你可以根据自己的系统调整:

import datetime as dt
import locale

# 尝试设置法语locale,兼容不同系统
try:
    # Linux/macOS系统常用的法语locale
    locale.setlocale(locale.LC_TIME, 'fr_FR.UTF-8')
except:
    # Windows系统的法语locale备选
    locale.setlocale(locale.LC_TIME, 'fra')

# 直接使用Unicode格式的日期字符串(不需要手动encode)
date_str = "Février 2017"
date_obj = dt.datetime.strptime(date_str, "%B %Y")
print(date_obj)  # 输出:2017-02-01 00:00:00

为什么你的原有代码会报错?

  • 第一个例子里你把字符串encode('utf-8')转成了字节串,在Python 2环境下(你引入了unicode_literals),strptime处理字节串时会用系统默认编码去解码,和你的UTF-8字节串不匹配,导致解析失败。
  • 第二个例子里没有设置法语locale,%B默认匹配的是英文月份名称,自然无法识别法语的Février,所以抛出了Unicode相关的错误。

额外提醒

  • 如果你的系统没有安装法语locale,可能需要先安装它:比如Linux下可以用sudo locale-gen fr_FR.UTF-8命令生成。
  • 如果你用的是Python 3,字符串默认就是Unicode格式,不需要引入from __future__ import unicode_literals,直接设置locale后解析即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:22:33