python中的编码问题
admin
2023-07-31 01:48:18
0

1. 声明

首先声明几个名词解释:
1. 文件本身的编码:可以利用file检查文件的编码格式。例如:

file test.py
test.py: UTF-8 Unicode Java program text

这时文件本身的编码是UTF-8的。

  1. python代码的编码:打开文件,在文件上部添加的encoding。例如:
# -*- encoding: utf-8 -*-
import sys

2. 怎么设定编码

既然存在2个编码,那么就存在相同和不同情况,两者相同自然是没问题,比如都是gb18030或者utf-8,如果不同会怎么样呢?显然是编码显示错误,看如下几个例子:
文件编码为utf-8,代码编码为gb18030,有:

# -*- encoding: gb18030 -*-

str_alphabeta = \"ABCDEFG\"
print type(str_alphabeta)
print str_alphabeta

str_kanji = \"可口可乐\"
print type(str_kanji)
print str_kanji

输出为:

File \"test.py\", line 1
SyntaxError: encoding problem: with BOM

出现一个新的关键词BOM,这个可以google一下,如果你在vim中看到这么一个东西,那也是BOM引起的,如果文档是utf-8个人觉得使用无BOM格式会好处理点。
那么为了能正常运行,需要文档的编码和代码的编码一致

3. unicode_literals

来自future库的内容表示现在还在“试用”阶段,如果你追求“新”就用,如果你追求“稳”就别用(我这么理解的,虽然我经常用division)。
unicode_literals的帮助是这么写的:

>>> help(unicode_literals)
Help on instance of _Feature in module __future__:

class _Feature
 |  Methods defined here:
 |  
 |  __init__(self, optionalRelease, mandatoryRelease, compiler_flag)
 |  
 |  __repr__(self)
 |  
 |  getMandatoryRelease(self)
 |      Return release in which this feature will become mandatory.
 |      
 |      This is a 5-tuple, of the same form as sys.version_info, or, if
 |      the feature was dropped, is None.
 |  
 |  getOptionalRelease(self)
 |      Return first release in which this feature was recognized.
 |      
 |      This is a 5-tuple, of the same form as sys.version_info.

简单地说就是,非unicode(32)的代码编码(例如utf-8),直接赋值一个字符串得到的编码是代码的编码方式,对象的类型是str,但是如果字符串前面加一个“u”就表示这个字符串是unicode(32)的编码,例如:

# -*- encoding: utf-8 -*-

str_kanji = \"可口可乐\"
print type(str_kanji)
print str_kanji

str_kanji_unicode = u\"可口可乐\"
print type(str_kanji_unicode)
print str_kanji_unicode

输出为:


可口可乐

可口可乐

第一个可口可乐是utf-8编码的(可以通过locale中的LC_CTYPE来验证),第二个是unicode(32)的。
如果import unicode_literals则变为(代码略):


可口可乐

可口可乐

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...