在 Python 中将 Unicode 转换为 ASCII

news2024/11/15 12:40:42

通过本文,我们将学习如何将 Unicode 编码为字节,了解系统编码的不同方法以及在 Python 中将 Unicode 转换为 ASCII。


在 Python 中将 Unicode 转换为 ASCII

Python 3 字符串的基本问题是由字符组成的; Python 中没有字符类型,但它们包含 Unicode 字符。

如果我们说 a = ‘abcd’ 并使用 len() 函数检查它的长度,那么我们得到 4 并且我们声明 s=‘שלום’ 意思是你好,这是希伯来语中的单词。 这些长度是相同的,这很好,因为两个变量都有四个字符。

>>a='abcd'
>>len(a)
4
>>s='שלום'
>>len(s)
4

事实上,幕后是不同的字节数与这里的问题无关,len() 测量的是字符数,而不是字节数,但当然,在幕后,UTF-8 Unicode 字符和 UTF-8 编码使用更多字节。

那么我们如何将字符串转换为我们需要的字节呢? 好吧,我们可以使用 s.encode(),如果我们这样做,它会返回一个字节字符串,该字符串将是我们创建希伯来语单词 שלום 所需的八个字节。

>>s.encode()
b'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d'
>>'abcd'.encode()
b'abcd'

现在我们将获取一个 Unicode 字符串并将其转换为字节字符串,但它比这更复杂,因为我们知道这个字符串是什么,并且我们想要取回不代表 Unicode 底层字节的字节。 我们想要取回不同编码系统的底层字节。

例如,我们使用 iso-8859-8,这是您可能听说过的一种在西欧广泛使用的编码类型,它允许我们在一个字节中包含特定语言所需的所有不同字符 ,所以如果我们需要将一个字符串转换为非 Unicode 的编码。

>>s.encode('iso-8859-8')
b'\xf9\xec\xe5\xed'

让我们看看如果我们有来自不同语言的东西会发生什么,就像我们说 s='北京' 就是北京,如果我们对其进行编码,那么我们会得到一个字节字符串。

我们看到这里有六个字节,因为每个汉字都由三个字节表示; 这是我们使用 UTF-8 进行的可变长度编码。

>>s='北京'
>>s.encode()
b'\xe5\x8c\x97\xe4\xba\xac'

现在我们想使用 iso-8859-8 对 北京 进行编码,当我们执行此操作时,我们会得到 UnicodeEncodeError,这意味着编码告诉我们您想要获取这些 Unicode 字符并将它们转换为 iso-8859 的字节 -8 不允许的编码。

s.encode('iso-8859-8')

UnicodeEncodeError

如果我们用这个连接英语单词,它也会失败,因为任何地方我们可能有错误,它都会失败,但我们可以添加一个参数来帮助忽略错误。

>>s='I often go to 北京'
>>s.encode('iso-8859-8',errors='ignore')
b'I often go to '

如果您有一大堆文本并且可以丢失 Unicode 字符,则可以使用此选项。

让我们看一下默认情况下等于 strict 的 help(s.encode),但它可以是一些不同的东西,所以如果我们使用替换值来错误,它并不真正知道如何替换,所以它 只是要使用问号。

help(s.encode)

Help on encode

>>s='I often go to 北京'
>>s.encode('iso-8859-8',errors='replace')
b'I often go to ??'

当我们使用 xmlcharrefreplace 时,我们会返回与这些 Unicode 字符有关的 XML 实体,因此如果您要将其粘贴到 XML 文档或 HTML 中,那么这将起作用。

>>s.encode('iso-8859-8',errors='xmlcharrefreplace')
b'I often go to 北京'

这取决于您的需求; 如果您将 Unicode 字符转换为字节,这是典型的情况,因为您将通过网络发送它们,或者您正在处理某种其他类型的编码系统。

如果您是初学者并且不想详细介绍,请使用以下命令安装名为 unidecode 的 Python 包。

它将直接将 Unicode 转换为 ASCII; 当您使用需要将 Unicode 转换为 ASCII 的应用程序时,它会很有帮助。

>>pip install unidecode
>>>from unidecode import unidecode
>>>unidecode(u'北京')
'Bei Jing'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1134488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据清洗与规范化详解

数据处理流程,也称数据处理管道,是将原始数据转化为有意义的信息和知识的一系列操作步骤。它包括数据采集、清洗、转换、分析和可视化等环节,旨在提供有用的见解和决策支持。在数据可视化中数据处理是可视化展示前非常重要的一步,…

搭建SNMP服务器

要搭建SNMP服务器,您可以按照以下步骤进行操作: 选择合适的操作系统:您可以选择在Windows、Linux或其他操作系统上搭建SNMP服务器。不同的操作系统有不同的安装和配置方法。 安装SNMP软件:根据您选择的操作系统,安装相…

AIGC扫盲和应用场景探究

什么是AIGC? AIGC(Artificial Intelligence Generated Content)是指利用人工智能技术生成内容的能力。火爆的虚拟数字人,就是AIGC的典型代表,它可以通过学习大量数据和知识,生成与人类创作相似甚至超越人类…

UG\NX二次开发 同时设置多个对象的高亮状态 UF_DISP_set_highlights

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 captainliubang 订阅本专栏,非常感谢。 简介 UG\NX二次开发 同时设置多个对象的高亮状态 UF_DISP_set_highlights 效果 代码(在for循环中逐个设置多个对象…

数据结构零基础C语言版 严蔚敏-线性表、顺序表

二、顺序表和链表 1. 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...... 线性表在逻辑上是线性结构,…

【MySQL索引与优化篇】索引的数据结构

文章目录 1. 概述2. 常见索引结构2.1 聚簇索引2.2 二级索引(辅助索引、非聚簇索引)2.3 联合索引 3. InnoDB的B树索引的注意事项3.1 根页面位置万年不动3.2 内节点中目录项记录的唯一性 4. MyISAM中的索引方案5. InnoDB和MyISAM对比6. 小结7. 补充:MySQL数据结构的合…

有六家机器视觉公司今年11月份初放假到明年春节后,除夕不放假看住企业不跑路,不倒闭,明年大家日子会越来越甜

不幸的消息一个接着一个,请大家注意下面的消息 我已经收到已经有6家机器视觉公司今年11月份初放假到明年春节后,他们真的没有订单了,其中4家宣布员工可以自行寻找工作,今年除夕不放假是经济下行经济考量吗?看住企业不…

分布式:一文搞定Redis/Zookeeper/MySQL实现分布式锁

目录 一、项目准备spring项目数据库 二、传统锁演示超卖现象使用JVM锁解决超卖解决方案JVM失效场景 使用一个SQL解决超卖使用mysql悲观锁解决超卖使用mysql乐观锁解决超卖四种锁比较Redis乐观锁集成Redis超卖现象redis乐观锁解决超卖 三、分布式锁概述四、Redis分布式锁实现方案…

全连接层是什么,有什么作用?

大家好啊,我是董董灿。 如果你是搞AI算法的同学,相信你在很多地方都见过全连接层。 无论是处理图片的卷积神经网络(CNN),还是处理文本的自然语言处理(NLP)网络,在网络的结尾做分类…

机器学习之ROC与AUC

文章目录 定义ROC曲线:AUC(Area Under the ROC Curve): 定义 ROC(Receiver Operating Characteristic)曲线和AUC(Area Under the ROC Curve)是用于评估二分类模型性能的重要工具。 …

Macos文件图像比较工具:Kaleidoscope for Mac

Kaleidoscope是一款文件图像比较工具,它可以方便地比较两个文本或者图片文件的差异。这个工具可以在Mac系统上使用,并且支持多种文件格式,包括文本文件、图片文件、PDF文件等等。 Kaleidoscope有一个直观的用户界面,可以让用户轻…

Postman的高级使用,傻瓜式学习【上】

目录 前言 1、小白使用Postman是不是这样的? 2、管理测试用例 2.1、创建用例集collections 3、用例集的导出导入 4、再次认识Postman ​编辑 5、Authrization授权 6、Pre-request Script 前置脚本 7、Tests 断言 Postman中常用的断言: 1&…

电源控制系统架构(PCSA)背景和简介

安全之安全(security)博客目录导读 目录 一、PCSA背景 二、PCSA简介 三、PCSA范围和限制 电源控制系统架构规范描述了一种基于Arm组件的SoC电源控制系统架构的方法。它定义了电源控制系统架构(PCSA)的V2.1版本。 由于Arm组件自1.0版本以来的发展,该版本包含了重…

WAS如何设置日志大小和数量

WAS如何设置日志大小和数量 注意: 本经验使用的版本为WebSphere Application Server 7.0.0.25 在IE中输入控制台地址,然后点击【继续浏览此网站(不推荐)】选项 ​​​ 输入控制台的用户名和密码,点击【登陆】&#x…

Linux文件系统、文件I/O和动静态库

文章目录 一、Linux文件系统1.存储设备文件系统2.伪文件系统a).procfs文件系统b).sysfs文件系统 3.虚拟文件系统4.文件系统的结构5.软硬链接 二、文件I/O1.I/O分类a).缓冲与非缓冲 I/Ob).直接与非直接 I/Oc).阻塞与非阻塞 I/O VS 同步与异步 I/O 2.Linux中I/O系统调用函数a).op…

ZKP6.3 Discrete-log-based Polynomial Commitments (Bulletproofs)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 6: Discrete-log-based Polynomial Commitments (Yupeng Zhang) 6.3 Bulletproofs and other schemes based on discrete-log KZG: Pros: Commitment and proof size: O(1), 1 group elementVerifier time: O(1) pairing Cons…

【Docker从入门到入土 6】Consul详解+Docker https安全认证(附证书申请方式)

Part 6 一、服务注册与发现的概念1.1 cmp问题1.2 服务注册与发现 二、Consul ----- 服务自动发现和注册2.1 简介2.2 为什么要用consul?2.3 consul的架构2.3 Consul-template 三、consul架构部署3.1 Consul服务器Step1 建立 Consul 服务Step2 查看集群信息Step3 通过…

UE4/5 竖排文字文本

方法一、使用多行文本组件 新建一个Widget Blueprint 添加Text 或者 Editable Text(Multi-Line) 、TextBox(Multi-Line) 组件。 添加文字,调整字号,调整成竖排文字。 在Wrapping (换行)面板中 : 勾选 Auto Wrap te…

java/javaswing/窗体程序,人脸识别系统,人脸追踪,计算机视觉

源码下载地址 支持:远程部署/安装/调试、讲解、二次开发/修改/定制 源码下载地址

Openssl数据安全传输平台011:秘钥协商客户端

文章目录 0. 代码仓库拷贝jsoncpp库至工程目录下编译protobuf类文件Message.proto VS 2022 设置 0. 代码仓库 https://github.com/Chufeng-Jiang/OpenSSL_Secure_Data_Transmission_Platform/tree/main/Preparation 拷贝jsoncpp库至工程目录下 编译protobuf类文件 VS2022 pr…