首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >与python和文件系统中的字符串编码混淆

与python和文件系统中的字符串编码混淆
EN

Stack Overflow用户
提问于 2015-12-28 13:41:49
回答 1查看 296关注 0票数 1

我正在研究学习蟒蛇。它有一个很好的章节来处理python中的unicode字符串。

我只需要澄清我是否正确理解了它。这就是我所理解的。

我发现python 2.xstr,它支持普通文本和字节,它有u'...'文本或unicode(),用于特殊文本,如unicode字符。

另一方面,python 3.x具有支持unicode文本的str,因为所有普通文本都是unicode。

记住这一点,如果您像s = 'something'一样编写,那么s既是普通文本,也是python 2.x中的字节和python 3.x中的unicode文本的组合。

现在我还读到,文件编码过高,为了在磁盘中保存一些东西,我们需要数字,并且为了存储广泛的字符,我们需要一些编码技术。

这就是我们所拥有的

python 3.x中,所有带单引号、双引号和三引号的字符串都以特定的转换格式进行编码和解码,并存储在内存中(用于python解释器)。

另一方面,为了在磁盘上存储文件内容,操作系统遵循某种编码技术来存储不同范围的字符。因此,当我们在文件上编写代码以获得特定的代码点,以便它可以将该代码点保存在内存中时,以及当我们从存储在内存中的文件中提取信息时,通过使用与我们之前使用的完全相同的编码技术,将这些代码点解码为字符。

文件内容以代码点的形式存储在磁盘中,但是当我们在文本编辑器中打开一个文件时,我们看到这些代码点的解码格式是字符形式的。

差不多就是这样。这些都是我所理解的正确吗?此外,我愿意接受任何其他关于unicode的信息,如果你有。

EN

回答 1

Stack Overflow用户

发布于 2015-12-28 21:57:03

您可以阅读Unicode howtos:

简而言之:

这两个Python版本都具有字节数据类型和文本数据类型

代码语言:javascript
运行
AI代码解释
复制
# python 2 (without from future import ...):
bytes = "abcd"
text  = u"abcd"
代码语言:javascript
运行
AI代码解释
复制
# python 3:
bytes = b"abcd"
text  = "abcd"

没有像普通文本和Unicode文本那样的东西。只是发短信。对于文本,应始终使用Unicode字符串;对于二进制数据,应始终使用字节。

文件存储字节

文件始终是一个字节序列。如果您以文本形式打开文件,Python 3将执行解码。因此,您通常必须指定使用哪种编码:open('file.txt', encoding='utf-8')。例如,在Python2中用io.open做同样的事情是个好主意。

Python源文件包含Unicode文本

对于Python 3,这是规范的一部分:请参阅2. Lexical analysis

Unicode将程序文本读取为

代码点。

但在磁盘上,文件只是字节。同样,Python会将这些字节解码为Unicode文本。要确保Python使用正确的编码,必须声明所使用的编码不同于默认编码(对于Python 2使用ASCII,对于Python 3使用UTF-8 )。

这也告诉您Python如何处理Unicode字符串文字。源代码是一系列Unicode代码点,因此字符串由引号之间的代码点组成。

另一方面,字节文字应该只包含ASCII字符,这些字符映射在字节0-127上。对其他字节使用\x转义。使用其他字符可能会引发SyntaxError。

ASCIIPython2ASCIIOnly指定字符串文字(和注释)可以使用之外的另一种编码。但是,如果您遵循上面的约定,您将在byte和unicode字符串中获得预期的字节和代码点。

…但是文件不存储字节吗?

当然可以。包含Unicode字符序列的文件的概念是abstraction.。这种抽象是leaky的一种方式是需要声明一种编码,该编码指定磁盘上Unicode字符和字节序列之间的映射。文本编辑器必须使用相同的编码来保存源代码。

另一件事是,Python规范并没有准确地将Python源文件定义为由编码的Unicode文本组成。但它是以这样一种方式指定的:在实践中,源文件几乎总是这样的文本文件。这样做的一个后果就是不像eg。JSON,您不能将Python源文件编码为UTF-16。

但除此之外,这种抽象工作得很好。您可以在文本编辑器中键入(或粘贴) Unicode字符,Python中的字符串将包含正确的字符。

test.py

代码语言:javascript
运行
AI代码解释
复制
print(unicodedata.name("⛄"))
print(unicodedata.name(""))
print("⛄ ") # this line may not work on your platform

输出:

代码语言:javascript
运行
AI代码解释
复制
SNOWMAN WITHOUT SNOW
FACE WITH TEARS OF JOY

(仅当Python知道如何将Unicode打印到平台上的控制台时,才能直接打印字符。在Linux上,它很有可能会正常工作)

在内部,您的文本编辑器将雪人转换为字节,例如。0xe2, 0x9b, 0x84和Python解释器将再次解码这些字节。但是,一旦您使用正确的编码设置了编辑器,这个过程就会隐藏起来,您只能使用Unicode字符。

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

https://stackoverflow.com/questions/34494635

复制
相关文章
Powershell编码与混淆
在powershell中最常使用的编码就是base64编码了,今天主要说一下Invoke-Obfuscation 这个powershell混淆编码框架,这也是著名的组织APT32 (海莲花)经常使用的
FB客服
2018/02/26
1.6K0
Powershell编码与混淆
python基础-字符串与编码
转载于:廖雪峰的官方网站-python教程 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。 由于计算机
昱良
2018/04/08
9610
python基础-字符串与编码
python中的编码与解码
编码/解码本质上是一种映射(对应关系),比如‘a’用ascii编码则是65,计算机中存储的就是00110101,但是显示的时候不能显示00110101,还是要显示'a',但计算机怎么知道00110101是'a'呢,这就需要解码,当选择用ascii解码时,当计算机读到00110101时就到对应的ascii表里一查发现是'a',就显示为'a'
李拜六不开鑫
2018/09/04
1.3K0
python中的编码与解码
python字符串与url编码的转换
主要应用的场景 爬虫生成带搜索词语的网址 1.字符串转为url编码 import urllib poet_name = "李白" url_code_name = urllib.quote(poet_name) print url_code_name #输出 #%E6%9D%8E%E7%99%BD 2.url编码转为字符串 import urllib url_code_name = "%E6%9D%8E%E7%99%BD" name = urllib.unquote(url_code_name) prin
py3study
2020/01/07
3.3K1
《5》python字符串和编码
「5」python字符串和编码 字符编码 最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。 中国制定了GB2312编码,用来把中文编进去。 Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。 但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。 本着节约的精神,又出现了把Unicode编码转化为“
企鹅号小编
2018/02/01
7700
《5》python字符串和编码
【Python】3“字符串和编码“
小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出’xx.x%’,只保留小数点后1位: # !/usr/bin/env python3 # -*- coding: utf-8 -*- s1 = 72 s2 = 85 r = (85 - 72) / 72 * 100 print('%0.1f%%' % r)
肓己
2021/08/12
4090
js --- 中字符串与unicode编码
2、charCodeAt ():在第一个的基础上,返回的是字符的unicode编码
小蔚
2019/09/11
4.9K0
Python 基础系列--字符串与编码
字符串在编程中是使用频率最高的数据类型,像 web 网站中显示的中英文信息,使用记事本打开一个文本文件所看到的内容,软件呈现给用户的信息,包括你现在看到的文字,都属于字符串,可以说字符串无处不在。如果对字符串的编码不理解,编辑过程中非常容易出现乱码问题,相反如果懂编码,那么即使出现乱码,也可以自助解决。不同的编程语言对字符串的处理可能略有差异,但对字符串的编码原理却是相通的, 因此字符串和编码是每个准程序员必备知识,需要引起重视。
somenzz
2020/12/10
9020
Python 基础系列--字符串与编码
字符串与编码
在最新的Python 3版本中,字符串是以Unicode编码的,即Python的字符串支持多语言
py3study
2020/01/16
1K0
Python 源码混淆与加密
Python 是一种解释型语言,没有编译过程,发布程序的同时就相当于公开了源码,这也是其作为开源语言的一个特性。但在某些场景下,我们的源码是不想被别人看到的,例如开发商业软件、编写 0day 漏洞 POC/EXP、免杀 shellcode 等。
全栈程序员站长
2022/10/02
6K0
Python 源码混淆与加密
字符串和编码
我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。
用户9076598
2022/03/02
5020
python2与python3的字符串编码对比
python3相比于python2最大改变在于,python 3对文本和二进制数据作了更为清晰的区分,两者不可做任何隐式转化。
week
2018/08/24
5780
python2与python3的字符串编码对比
python字符串编码
  python 2.x默认的字符编码是ASCII,默认的文件编码也是ASCII。
py3study
2020/01/20
2.1K0
Python字符串的编码格式
文章链接: https://icodeq.com/2021/ad69b6cca766/
Zkeq
2022/05/18
1.1K0
python中json和字符编码的转换
json是用来转换python object 和json format 的,字符编码有gb2312,gb18030/gbk,utf-8等。
py3study
2020/01/10
4K0
字符串和编码
字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。 由于计算机是美国人发明的,因此,最早只有127个字母被
wangxl
2018/03/08
9420
字符串和编码
字符串和编码
ASCII(American Standard Code for Information Interchange),是一种单字节的编码。计算机世界一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英语字符和许多的控制符号。不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础。
紫禁玄科
2022/03/24
7260
字符串和编码
Python中的编码
Python处理字符串,写文件时会碰到许多的编码问题,特别是涉及到中文的时候,非常烦人,但又不得不学。下面主要记录工作过程中碰到的Python编码问题。 1. 字符串编码 Python的字符串类型为s
Tyan
2017/12/29
1K0
Python基础教程之字符串和编码
1. 字符编码 由于计算机只能处理数字,如果要处理文本就必须将文本转换为数字才能处理,最早设计的时候采用8b 表示一个字节,一个字节能够表示的最大整数是255,如果要表示更大的整数,就必须用多个字节。另外由于计算机是美国人发明的,所以计算机早期只有127个字符被编码到计算机了,也就是Ascii码,后来要处理中文中国就指定了GB2312 ,但是其他国家也有自己的语言 然后就有了不同的标准, 所以就有组织将所有的统一成 Unicode编码。 2. python字符串 在python 中字符串支持多语言,py
执行上下文
2022/07/26
2450
Python学习总结4--字符串和编码
一、编码历史     由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。     但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。     Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了     本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码
曼路
2018/10/18
4140
Python学习总结4--字符串和编码

相似问题

ANSI、ASCII、Unicode和编码与Python混淆

32

Python中字节字符串和base64编码的混淆

15

PHP编码与混淆

15

与html编码混淆

16

Rails与编码的混淆

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文