当前位置: 首页 > article >正文

python printf中文乱码

目录

  • 编码方式
    • Ascii
    • Unicode
    • utf-8
    • gbk
    • 总结
  • 使用方式
    • 编码对象转换的基本逻辑
    • Ascii & Unicode & utf-8 & gbk
  • Reference

在使用python开发上位机软件的时候,发现ARM发送的printf语句,只要打印中文,上位机软件就是乱码显示,仔细研究了一下相关资料,解决了该问题,这里和大家一起分享一下经验~

编码方式

在python中最常见的编码方式有四种,分别是ascii, unicode, utf8和gbk。

Ascii

ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 -1 = 255,所以,ASCII码最多只能表示 255 个符号。

Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode规定所有字符和符号最少使用2字节(16 bites)来表示。

utf-8

UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存。

gbk

gbk,也是基于Unicode编码的进一步优化,其文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示。

总结

在这里可以将这四种编码方式的特点放在如下表格里进行总结和比较:
在这里插入图片描述

使用方式

编码对象转换的基本逻辑

在计算机内存中,统一使用Unicode编码,Python的字符串类型是str,一个字符对应若干个字节。当需要保存到硬盘或者需要COM传输的时候,就转换为UTF-8或GBK编码(bytes),可以节省空间。这个时候就需要把str变为以字节为单位的bytes。
因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode 编码(encode)成另一种编码。

Ascii & Unicode & utf-8 & gbk

• 在python2默认编码是ASCII, python3里默认是utf-8。如果在py2文件中有中文时,ascii码将无法表示。因此,在.py 文件中,应该在文件开头以注释的方式明确告诉python解释器,用什么编码来执行源代码:

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

• 在python3中, python解释器默认以Unicode对内容进行编码,所以不需指定编码格式即可表示中文。
2.3 Python 转化命令

# 满洲里国峰电子科技  www.guofengdianzi.com 
# weixin: guofengdianzi
From Unicode to utf-8 and from utf-8 to Unicode
example_utf8 = example_str.encode("utf-8")
example_str_return_from_utf8 = example_utf8.decode("utf-8")

From Unicode to gbk and from gbk to unicode
example_gbk = example_str.encode("gbk")
example_str_return_from_gbk = example_gbk.decode("gbk")

From gbk to utf-8 and from utf-8 to gbk
example_str_return_from_gbk = example_gbk.decode("gbk") example_utf8_return_from_gbk = example_str_return_from_gbk.encode("utf-8")
example_str_return_from_utf8 = example_utf8.decode("utf-8") example_gbk_return_from_utf8 = example_str_return_from_utf8.encode("gbk")

From unicode to assic and from assic to unicode
example_ascii = ord(example_str)
example_str_return = chr(example_ascii)

2.4 举例
在这里我们以中文“发送成功”为例,来看看这几种编码方式在python中的表现。
在这里插入图片描述
在这里插入图片描述

作者:潇洒的电磁波(专业:射频芯片设计、雷达系统、嵌入式。欢迎大家项目合作交流。)

Reference

[1] https://blog.csdn.net/weixin_30294295/article/details/98390432?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-98390432-blog-122048843.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-98390432-blog-122048843.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=6
[2] • https://blog.csdn.net/weixin_36005427/article/details/112934602?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-4-112934602-blog-122048843.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.3&utm_rel


http://www.kler.cn/a/390147.html

相关文章:

  • 什么是RAG? LangChain的RAG实践!
  • PostgreSQL 开启密码验证插件
  • 平替 Spring 正当时!Solon v3.0.3 发布
  • 后端接口返回二进制文件,前端 window.opent预览展示
  • Debezium日常分享系列之:异步 Debezium 嵌入式引擎
  • 运行springBlade项目历程
  • JedisException:Could not get a resource from the pool
  • SpringCloud 微服务消息队列灰度方案 (RocketMQ 4.x)
  • SQL 窗口函数
  • 什么是C/C++,有什么特点
  • 物联网学习路线来啦!
  • 道可云人工智能元宇宙每日资讯|2024国际虚拟现实创新大会将在青岛举办
  • cache写策略 操作系统
  • nginx 部署2个相同的vue
  • 241111.学习日志——【CSDIY】Cpp零基础速成
  • 2024年11月10日系统架构设计师考试题目回顾
  • 【算法速刷(9/100)】LeetCode —— 42.接雨水
  • 2024年9月青少年软件编程(C语言/C++)等级考试试卷(四级)
  • flask logger 使用 TimedRotatingFileHandler 报错 PermissionError 另一个程序正在使用此文件
  • NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备:大华IPC摄像头局域网访问异常解决办法
  • 哪家云服务器好跑AI?瞄准AutoDL(附NVIDIA GPU 算力排名表)
  • Linux基础之病毒编写
  • Docker 操作指令
  • 如何设置el-date-picker的默认截止时间为“23:59:59”
  • 故事121
  • Ceph MDS高可用架构探索:从零到一构建多主一备MDS服务