百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python的字符串及编码转换

itomcoil 2025-01-07 13:24 18 浏览

在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言。

ord和chr

在 Python 中,对于单个字符编码处理有便捷的函数。ord () 函数能够获取字符的整数表示,而 chr () 函数则可将编码转换为对应的字符。例如:

print(ord('A'))  
print(ord('中'))  
print(chr(66))  
print(chr(25991))

若已知字符的整数编码,还可以用十六进制来表示字符串,如 '\u4e2d\u6587' 等同于 ' 中文 '。


Python 中的字符串类型 str 在内存中以 Unicode 形式存在,一个字符对应若干字节。当需要在网络传输或保存到磁盘时,需将 str 转换为以字节为单位的 bytes 类型。bytes 类型的数据在 Python 中用带 b 前缀的单引号或双引号表示,如 x = b'ABC'。要区分 'ABC'(str 类型)和 b'ABC'(bytes 类型),后者每个字符只占一个字节。

encode和decode

str 类型可通过 encode () 方法编码为指定的 bytes。例如:

print('ABC'.encode('ascii'))
print('中文'.encode('utf - 8'))
try:
    print('中文'.encode('ascii'))
except UnicodeEncodeError as e:
    print(e)

纯英文的 str 用 ASCII 编码为 bytes 时内容不变,含中文的 str 需用 UTF - 8 编码为 bytes,若用 ASCII 编码含中文的 str 会报错,因为中文编码超出了 ASCII 范围。在 bytes 中,无法显示为 ASCII 字符的字节用 \x## 表示。


反过来,从网络或磁盘读取的字节流为 bytes 类型,要将其转换为 str,需使用 decode () 方法。例如:

print(b'ABC'.decode('ascii'))
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf - 8'))
try:
    print(b'\xe4\xb8\xad\xff'.decode('utf - 8'))
except UnicodeDecodeError as e:
    print(e)

若 bytes 中包含无法解码的字节,decode () 方法会报错,不过可以传入 errors = 'ignore' 来忽略错误字节,如:

print(b'\xe4\xb8\xad\xff'.decode('utf - 8', errors = 'ignore'))

计算 str 包含的字符数可使用 len () 函数。当处理 bytes 时,len () 函数计算字节数。例如:

print(len('ABC'))
print(len('中文'))
print(len(b'ABC'))
print(len(b'\xe4\xb8\xad\xe6\x96\x87'))
print(len('中文'.encode('utf - 8')))

可见,一个中文字符经 UTF - 8 编码通常占用 3 个字节,英文字符占 1 个字节。

结论:

在操作字符串时,常涉及 str 和 bytes 的相互转换,为避免乱码,应始终采用 UTF - 8 编码进行转换。

由于 Python 源代码是文本文件,若包含中文,保存时需指定为 UTF - 8 编码。并且通常在文件开头写上:

#!/usr/bin/env python3
# -*- coding: utf - 8 -*-

第一行注释用于告知 Linux/OS X 系统这是 Python 可执行程序(Windows 会忽略),第二行注释告诉 Python 解释器按 UTF - 8 编码读取源代码,否则中文输出可能乱码。需注意,声明了 UTF - 8 编码不代表.py 文件就是 UTF - 8 编码,还需确保文本编辑器使用 UTF - 8 编码。若.py 文件本身是 UTF - 8 编码且有上述声明,在命令提示符下测试可正常显示中文。

相关推荐

tesseract-ocr 实现图片识别功能

最近因为项目需要,接触了一下关于图像识别的相关内容,例如Tesseract。具体如何安装、设置在此不再赘述。根据项目要求,我们需要从省平台获取实时雨水情况数据,原以为获取这样的公开数据比较简单,上去一...

跨平台Windows和Linux(银河麒麟)操作系统OCR识别应用

1运行效果在银河麒麟桌面操作系统V10(SP1)上运行OCR识别效果如下图:2在Linux上安装TesseractOCR引擎2.1下载tesseract-ocr和leptonicahttps:...

JAVA程序员自救之路——SpringAI文档解析tika

ApacheTika起源于2007年3月,最初是ApacheLucene项目的子项目,于2010年5月成为Apache组织的顶级项目。它利用现有的解析类库,能够侦测和提取多种不同格式文档中的元数据...

Python印刷体文字识别教程

在Python中实现印刷体文字识别(OCR),通常使用TesseractOCR引擎结合Python库。以下是详细步骤和示例:1.安装依赖库bashpipinstallpytesseractp...

图片转文字--四种OCR工具的安装和使用

本文仅测试简单的安装和使用,下一步应该是测试不同数据集下的检测准确率和检测效率,敬请期待。作者的系统环境是:笔记本:ThindPadP520OS:win11显卡:QuadroP520一、EasyO...

mac 安装tesseract、pytesseract以及简单使用

一.tesseract-OCR的介绍1.tesseract-OCR是一个开源的OCR引擎,能识别100多种语言,专门用于对图片文字进行识别,并获取文本。但是它的缺点是对手写的识别能力比较差。2.用te...

【Python深度学习系列】Win10下CUDA+cuDNN+Tensorflow安装与配置

这是我的第292篇原创文章。一、前置知识安装GPU版本的pytorch和tensorflow之前需要理清楚这几个关系:显卡(电脑进行数模信号转换的设备,有的电脑可能是双显卡,一个是inter的集成显卡...

手把手教你本地部署AI绘图Stable Diffusion!成功率100%!

导语:无需每月付费订阅,无需高性能服务器!只需一台普通电脑,即可免费部署爆火的AI绘图工具StableDiffusion。本文提供“极速安装包”和“手动配置”双方案,从环境搭建到模型调试,手把手教你...

本地AI Agent Hello World(Python版): Ollama + LangChain 快速上手指南

概要本文将用最简洁的Python示例(后续还会推出Java版本),带你逐步完成本地大模型Agent的“HelloWorld”:1、介绍核心工具组件:Ollama、LangChain和...

python解释器管理工具pyenv使用说明

简介pyenv可以对python解释器进行管理,可以安装不同版本的python,管理,切换不同版本很方便,配置安装上比anaconda方便。pyenv主要用来对Python解释器进行管理,可以...

Deepseek实战:企业别只会用Ollama,也可以用SGLang

SGLang:企业级的“性能之王”优点吞吐量碾压级优势通过零开销批处理调度器、缓存感知负载均衡器等核心技术,SGLang的吞吐量提升显著。例如,在处理共享前缀的批量请求时,其吞吐量可达158,59...

用LLaMA-Factory对Deepseek大模型进行微调-安装篇

前面的文章已经把知识库搭建好了,还通过代码的形式做完了RAG的实验。接下来呢,咱们要通过实际操作来完成Deepseek的另一种优化办法——微调。一、环境因为我这台电脑性能不太好,所以就在Au...

碎片时间学Python-03包管理器

一、pip(Python官方包管理器)1.基础命令操作命令安装包pipinstallpackage安装特定版本pipinstallnumpy==1.24.0升级包pipinstall-...

ubuntu22/24中利用国内源部署大模型(如何快速安装必备软件)

本地AI部署的基础环境,一般会用到docker,dockercompose,python环境,如果直接从官网下载,速度比较慢。特意记录一下ubuntu使用国内源快速来搭建基础平台。一,docke...

还不会deepseek部署到本地?这篇教程手把手教会你

一、为什么要把DeepSeek部署到本地?新手必看的前置知识近期很多读者在后台询问AI工具本地部署的问题,今天以国产优质模型DeepSeek为例,手把手教你实现本地化部署。本地部署有三大优势:数据隐私...