Python utf-8 和 utf8 区别
Python 编码
python默认编码为 'ascii',查看方法:
homer@homer-pc:~/script$ python
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
python 设置自定义编码,方法如下:
homer@homer-pc:~/script$ python
>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('utf-8')
>>> sys.getdefaultencoding()
'utf-8'
python 在代码中设置编码,标准格式如下:
#!/usr/bin/env python # -*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8')
utf-8 和 utf8 区别
“UTF-8”是编码格式的标准写法
PHP在Windows下英文不区分大小写,所以也可以写成“utf-8”
“UTF-8”也可以把中间的“-”省略,简写成“UTF8”,一般程序都能识别,但也有例外(如MySQL),为了严格规范,最好用标准的大写“UTF-8”
在数据库中只能使用“utf8”
例如: 在MySQL的命令模式中只能使用“utf8”,不能使用“utf-8”,也就是说在PHP程序中只能使用“set names utf8(不加小横杠)”,如果你加了“-”此行命令将不会生效,但是在PHP中header时却要加上“-”,因为IE不认识没杠的“utf8”,原因如下:
1)PHP中的header
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
// 奇怪了:Content-Type用冒号,Chatset却是等号
2)静态文件使用
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
查看MySQL编码
1) 查看数据库(database)编码格式
mysql> show create database proxy;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| proxy | CREATE DATABASE `proxy` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+
2)查看数据库表(table)编码格式
mysql> show create table proxy_me;
| proxy_all | CREATE TABLE `proxy_me` (
`ip` varchar(40) NOT NULL
`port` int(10) NOT NULL,
`country` varchar(100) NOT NULL,
`type` char(10) NOT NULL DEFAULT 'HTTP'
PRIMARY KEY (`ip`,`port`,`type`),
KEY `index_update_time` (`update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
总结
只有在MySQL中可以使用"utf-8"的别名"utf8",但是在其他地方一律使用大写"UTF-8",即
1) 在MySQL里,编码格式为 "utf8"
2) 在其它场景里,编码格式推荐使用 "UTF-8",或小写 "utf-8"
Python 编码规范
官方参考文档: Defining Python Source Code Encodings
在Python源码的头文件中要声明编码方式,几种常见写法如下:
#coding=utf-8
#coding:utf-8
#-*- coding:utf-8 -*-
上面三种写法,怎样写才是有效地呢,优势有在哪呢?
怎么声明编码格式呢?
如果在Python中我们并没有声明别的编码方式,就是以'ascii'编码将作为默认的编码方式。
为了定义源文件的编码方式,规范做法是编码声明应当被放在这个文件的第一行或者是第二行,例如:
#coding=<encoding name>
或者
#!/usr/bin/python
# -*- coding: <encoding name> -*-
或者
#!/usr/bin/python
# vim: set fileencoding=<encoding name> :
不管怎么样,这些在第一行或者第二行的声明都要符合正则表达式
"coding[:=]\s*([-\w.]+)"
所以我们就可以知道为什么使用冒号或者等号都可以了,如果声明的编码python不能识别就会报错,示例如下:
Examples
These are some examples to clarify the different styles for defining the source code encoding at the top of a Python source file:
示例1:python文件
With interpreter binary and using Emacs style file encoding comment:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys
...
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import os, sys
...
#!/usr/bin/python
# -*- coding: ascii -*-
import os, sys
...
示例2: 文本文件
Without interpreter line, using plain text:
# This Python file uses the following encoding: utf-8
import os, sys
...
示例3:python文件
Text editors might have different ways of defining the file's encoding, e.g.
#!/usr/local/bin/python
# coding: utf-8
import os, sys
...
#!/usr/local/bin/python
# coding=utf-8
import os, sys
...
示例4:默认编码 'ascii'
Without encoding comment, Python's parser will assume ASCII text:
#!/usr/local/bin/python
import os, sys
...
示例5:错误写法
Encoding comments which don't work:
Missing "coding:" prefix:
#!/usr/local/bin/python
# latin-1
import os, sys
...
Encoding comment not on line 1 or 2:
#!/usr/local/bin/python
#
# -*- coding: latin-1 -*-
import os, sys
...
Unsupported encoding:
#!/usr/local/bin/python
# -*- coding: utf-42 -*-
import os, sys
...
总结:
上述五种写法,推荐第1种和第3种,第5种都是错误示例
参考推荐:
Python的ASCII,GB2312,Unicode,UTF-8区别
Python 常用加密算法 base64, md5, sha1
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2020-12-21 21:20:26
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!