1.3. 我踩的坑
1.3.1. strptime 和 strftime
1.3.2. 阿里云oss sdk 使用遇到的问题
2. 参考资料
locale遇到的问题今天工作上遇到一个 locale 相关的问题,关于字符串格式化的。不过让我们先从 locale 说起。
locale 简介 什么是localelocale 这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。locale 是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。通常情况下它可以按照涉及使用习惯分为12大类:
- 语言符号及其分类(LC_CTYPE) - 数字(LC_NUMBERIC) - 比较习惯(LC_COLLATE) - 时间显示格式(LC_TIME) - 货币单位(LC_MONETARY) - 信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES) - 行么书写方式(LC_NAME) - 地址书写方式(LC_ADDRESS) - 电话号码书写方式(LC_TELEPHONE) -度量衡表达方式(LC_MEASUREMENT) - 默认纸张尺寸大小(LC_PAPER) - 对locale 自身包含信息的概述(LC_IDENTIFICATION) - 除此之外还有一个LANGUAGE参数,它与LC_MESSAGES相似比如像下面的例子里:
在“简体中文”环境,运行date 命令,显示的是: 2016年11月24日 星期四 22时59分26秒 CST 而在英文环境下,运行date 命令,显示的是 Thu Nov 24 23:05:12 CST 2016简单来说, locale 为计算机上提供了国际化和本地化转化的环境
locale 相关命令在Unix下可以通过命令 locale 来查看当前语言环境,我的Mac上的显示如下:
➜ locale LANG= LC_COLLATE="zh_CN.UTF-8" LC_CTYPE="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_ALL="zh_CN.UTF-8"locale值格式类似为: 语言_地区.字符集
可以这样来查看系统支持locals值
locale -a可以用如下的方式来临时改变shell的locale设定:
➜ test git:(master) ✗ LC_ALL=C ➜ test git:(master) ✗ export LC_ALL ➜ test git:(master) ✗ locale LANG= LC_COLLATE="C" LC_CTYPE="C" LC_MESSAGES="C" LC_MONETARY="C" LC_NUMERIC="C" LC_TIME="C" LC_ALL="C"设置的时候注意以下几点:
LANG,LC*的默认值,是最低级别的设置,如果LC*没有设置,则使用该值。类似于 LCALL
LCALL,它是一个宏,如果该值设置了,则该值会覆盖所有LC*的设置值。注意,LANG的值不受该宏影响
LCALL=C 意思是去除所有本地化的设置
Python localepython提供了 locale 这个模块,可以用来操作locale相关数据,官方文档参见这里。
其中主要的结果方法如下
当在shell里启动python repl(交互器)时,默认的环境local设置为'C', 也就是没有本地化设置,这时候可以通过 locale.getdefaultlocale() 来查看shell当前环境的locale设置, 并通过 locale.setlocale(locale.LC_ALL, '') 将python解释器的locale设置成shell环境的locale,具体事例如下:
Python 2.7.10 (default, Oct 23 2015, 19:19:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import locale >>> locale.getlocale() (None, None) >>> locale.getdefaultlocale() ('zh_CN', 'UTF-8') >>> locale.setlocale(locale.LC_ALL, '') 'zh_CN.UTF-8' >>> locale.getdefaultlocale() ('zh_CN', 'UTF-8') >>> locale.getlocale() ('zh_CN', 'UTF-8') 我踩的坑 strptime 和 strftime