我想创建一个“unicode三明治”,它包含一些日期/时间值,并且独立于区域设置。对于初学者来说,unicode三明治一词描述了从字节到unicode再回到程序边界的实践,即外部的字节和内部的unicode。在
我今天早上看了Ned Batchelder's excellent video on unicode,并试图转换我的一些代码,以符合他的明智建议。在
我遇到的问题是我无法确定由str(date)
或其等价物返回的字符串的编码。我有点想清楚,我要做的事情是:
date_str_encoding = some_magical_method_I_have_yet_to_discover()
date = datetime.datetime(2013, 10, 16).date()
date_str = date.strftime('%A %B %d, &Y') # perhaps 'Sábado Octubre 19, 2013'
date_unicode = date_str.decode(date_str_encoding)
Ned的unicode“生活事实”之一是“你不能推断字节的编码。不幸的是,我在Python文档中找不到关于datetime的具体细节。在
另一个这样的帖子提到了语言环境.getlocale(),但这对我来说是回报(没有,没有)。在
如何在运行时可靠地发现Python日期字符串的编码?在
在cpython2.7中,} 的包装器。原则上,这取决于
datetime.date.strftime
是time.strftime
的包装器,它又是posix ^{LC_TIME
的语言环境类别。因此,您需要的是:以下是
datetime.date.__str__
的解构,与编辑问题之前相关。在在cpython2.7中,
^{pr2}$datetime.date.__str__
是用C实现的,它是:datetime.date.isoformat
反过来在C中实现为:基本上,
str(datetime.date)
返回的字节不是数字和“-”的ascii码。说:为什么不完全跳过
date_str
?unicode
构造函数接受日期对象。在在内部,它调用}的习惯,因为有些对象将定义一个
str(date)
。然后解码这些字节。所以这相当于显式地创建字节,然后解码它们,但在我看来,读起来更清晰。而且值得养成使用unicode
而不是显式使用str
和{__unicode__
方法,该方法可以返回规范的Unicode表示,而根本不需要经过__str__
。日期不会。在医生说:
定义为:
所以这也是ASCII码。如果你的默认编码不能解码ASCII,你就必须学会如何处理这种情况。在
相关问题 更多 >
编程相关推荐