首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >vim中的Python编码

vim中的Python编码
EN

Stack Overflow用户
提问于 2017-10-23 20:31:06
回答 3查看 766关注 0票数 0

试图用vim理解Python2.7中的编码/解码/unicode业务。

我有一个unicode字符串us,我给它分配了一些unicode字符串u‘。

问题1

us是如何在内存中表示的?unicode代码点\u应该由32位长的it组成吗?还是将其作为8位长十六进制值的序列保存在内存中?

问题2

我看到了为unicode字符串us设置编码的四种不同方法:#1在test.py文件的开头;#2作为编码函数的参数;#3作为vim的参数;#4作为文件系统的本地编码。那么,这四个编码(#1,#2,#3,#4)做什么呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ vim test.py
_____________
#encoding: #1
us=u'é'
print us.encode(encoding='#2')
_____________
:set encoding=#3

$ locale | grep LANG
LANG=en_US.#4
LANGUAGE=
EN

回答 3

Stack Overflow用户

发布于 2017-10-23 20:38:22

在Python2.x中,unicode被编码为UCS-2或UCS-4,这取决于构建它时使用的选项。

  1. 就Python而言,源代码编码。
  2. 用于在执行代码时将us编码为字节的编码。
  3. 就vim而言,源编码。如果这与#1不匹配,那么就会遇到麻烦。
  4. 系统编码主要影响文件系统和终端输出操作。
票数 2
EN

Stack Overflow用户

发布于 2017-10-23 21:08:45

问题1-储存

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
us = u'é'

这将创建一个Unicode字符,其值为é-在Python中,Unicode字符存储在UCS-2或UCS-4中,它们使用2或4字节长的无符号整数,这取决于构建时间选项。Python 3.3+使用UTF-8,它对每个字符使用1到4个字节,这取决于它所处的范围。

Unicode字符串的存储现在取决于字符串中最高的代码点:

  • 纯ASCII和Latin1字符串(U+0000-U+007F)每个编码点0 0xxxxxxx使用1字节;
  • BMP字符串部分(U+0080-U+07FF)每个编码点110xxxxx 10 bytes使用2个字节;
  • 残余BMP字符串(U+0800-U+FFFF)使用每个代码点1110xxxx 10xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  • 其他平原(U+10000-U+10 10FFFF)使用每个代码点11110xxx10xxxx10xxxxx10xxxxx10xxxxx 10 10000使用4个字节。

问题2-编码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
us=u'é'

声明我们是存储在上面的Unicode字符串,请注意,在python 3中,默认情况下所有字符串都是Unicode,因此可以省略u

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(us.encode('ascii', strict)) # encoding='#2')

告诉print如何尝试转换Unicode字符串以便输出,请注意,如果您使用的是Python和一个支持Unicode的终端/控制台,那么您可能不需要使用它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#set encoding=#3

告诉vim、emacs和一些编辑器在显示&/或编辑文件时使用的编码方法适用于所有文本文件,而不仅仅是python。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ locale | grep LANG
LANG=en_US.#4

是地区语言的操作系统设置,它告诉它如何具体显示在显示扩展ASCII时要使用的代码页。

票数 2
EN

Stack Overflow用户

发布于 2017-10-25 17:33:34

这实际上并没有回答这个问题,但我希望它能让我们对这个问题有更深入的了解。

对问题1的回答:对于程序员来说,在Python内部如何表示Unicode字符串并不重要。

关于问题2:

程序员应该关心的是,数据接收器和源编码需求是已知的,并且是正确指定的。我假设Python可以通过读取BOM来正确地解释UTF编码的文件,甚至可以通过有知识的猜测来解释,但是如果没有BOM,那么如何处理具有高位集的字节可能是模棱两可的,所以如果您不确定,最好确保BOM在那里,或者告诉Python该文件是UTF-8编码的。

"Unicode“和"UTF”之间的区别似乎被掩盖在上面;"UTF“指定了存储(磁盘、内存、网络数据包)中的表示形式,但是"Unicode”只是一个事实,即每个字符都有一个值(代码点),范围从0到0x10FFFF。各种类型的UTF将该值编码到适当的存储中。但是,使用编码的字符串可能会很烦人(因为字符宽度是可变的),因此当字符串在内存中实际表示时,更容易将它们扩展为某种允许轻松操作的格式。(在对另一个答复的评论中提到了这一点。)

如果您想在PythonPre-3中使用Unicode字符串,只需键入u'<whatever>'和3+类型'<whatever>'。您将得到Unicode,如果直接输入字符是不可行的,则可以使用\uXXXX\UXXXXXXXX转义。当您想要写入数据时,请指定编码。UTF-8往往是最容易处理,似乎是最常用的,但你可能有理由使用UTF-16的味道。

这里需要注意的是,编码只是一种转换Unicode数据的方法,以便能够持久化。UTF的各种风格只是编码,它们实际上不是Unicode。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46902239

复制
相关文章
vim设置编码
让Vim能正确显示和保存各种编码文件内容是个头疼的事情,今天专注的把这个问题研究一下
全栈程序员站长
2022/11/11
3.3K0
Python中的编码
Python处理字符串,写文件时会碰到许多的编码问题,特别是涉及到中文的时候,非常烦人,但又不得不学。下面主要记录工作过程中碰到的Python编码问题。 1. 字符串编码 Python的字符串类型为s
Tyan
2017/12/29
1K0
打造vim中的python IDE
1,ctags和taglist,这个大家估计都很常用,在ubuntu下只要安装exuberant-ctags即可啦,另外tagbar支持面向对象语言的展示
py3study
2020/01/06
1.1K0
Python中的编码问题
视频汇总首页:http://edu.51cto.com/lecturer/index/user_id-4626073.html
py3study
2020/01/06
2K0
python中的编码问题
在python2.x中,有两种数据类型,unicode和str,这两个都是basestring的子类
py3study
2020/01/05
1.4K0
启用 VIM 中的 Python 自动补
 此时, 按下 Ctrl+x, Ctrl+o, 就能看到提示列表框,以及对应的 docstring.
py3study
2020/01/09
9490
Vim编码知识,乱码问题
原文:http://demi-panda.com/2012/12/26/vim-encoding/
一见
2018/08/10
1.7K0
Vim编码知识,乱码问题
在 Vim 编辑器中开发 Python 应用的 Vim 插件
企鹅号小编
2018/01/05
1.8K0
在 Vim 编辑器中开发 Python 应用的 Vim 插件
Linux Vim中自动补全Python
Pydiction 可以是我们使用Tab键自动补全Python代码在Vim,是一款非常不错的插件。
py3study
2020/01/08
2.2K0
python中的编码与解码
编码/解码本质上是一种映射(对应关系),比如‘a’用ascii编码则是65,计算机中存储的就是00110101,但是显示的时候不能显示00110101,还是要显示'a',但计算机怎么知道00110101是'a'呢,这就需要解码,当选择用ascii解码时,当计算机读到00110101时就到对应的ascii表里一查发现是'a',就显示为'a'
李拜六不开鑫
2018/09/04
1.3K0
python中的编码与解码
Python 中的 Elias Delta 编码
首先,在为 Elias Delta 编码编写代码之前,我们将实现 Elias delta 编码。
海拥
2021/12/20
6630
python中烦人的编码问题
mysql数据中都是UTF编码,导出到文件称csv还是xls都是utf-8,用python的pandas读取可以,但每次写代码的时候都需要很小心看文件原来是什么编码
机械视角
2019/10/23
7910
Python中编码问题(UnicodeDecodeError)的处理
之前也遇到过,但是没有深入的去了解和测试,今天借此问题,对python的编码问题做个详细的学习;首先说明一点的是,目前公司的开发环境是Python 2.7;
SEian.G
2021/03/18
3.8K0
浅谈 Python 2 中的编码问题
Python 2.x 里的编码实在是一件令人烦躁的事情。不断有初学者被此问题搞得晕头转向。我自己也在很长一段时间内深受其害,直到现在也仍会在开发中偶尔被坑。在本教室的提问和讨论中,编码问题也占据了相当大的比重。 然而这个问题并不能一两句话轻易解答。今天在这里稍微分析一下,希望能帮各位理清这里面的问题。 要弄清编码问题,首先明确几个概念: str、unicode、encode、decode str 就是我们通常说的字符串,在 python 中是由引号包围的一串字符。但是 Python 中的默认字符并不包括中文
Crossin先生
2018/04/17
1K0
vim中的翻页命令[通俗易懂]
zz 让光标所杂的行居屏幕中央 zt 让光标所杂的行居屏幕最上一行 t=top zb 让光标所杂的行居屏幕最下一行 b=bottom
全栈程序员站长
2022/09/05
3.7K0
python中json和字符编码的转换
json是用来转换python object 和json format 的,字符编码有gb2312,gb18030/gbk,utf-8等。
py3study
2020/01/10
4K0
vim 的python 语法高亮
vim支持大部分文件格式的语法高亮,而且可以自定义。不过缺省的python语法高亮感觉太少,修改一下。
py3study
2020/01/07
3.9K0
vim中的翻页命令
zz 让光标所杂的行居屏幕中央 zt 让光标所杂的行居屏幕最上一行 t=top zb 让光标所杂的行居屏幕最下一行 b=bottom
用户2965768
2018/08/30
2.9K0
vim中翻页的命令
整页翻页 ctrl-f ctrl-b f就是forword b就是backward
全栈程序员站长
2022/09/05
1.1K0
vim中set的用法
整理了一些vim的set用法: 1.显示隐藏分隔符 set list 可以看到分隔符为制表符。 2.取消显示隐藏制表符 set nolist 3. 显示行号 set nu 4.取消显示行号 set
生信编程日常
2020/04/01
1K0
vim中set的用法

相似问题

用make实现Vim中奇怪的python编码错误

11

Vim编码选项

26

VIM中的UTF-8编码

11

vim中的编码都搞砸了

10

Vim: Windows上的quickfix编码

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文