python-字符编码1

python-字符编码1

字符编码应用于字符串和文本文件类型。字符串类型、文本文件的内容都是由字符组成的,但凡涉及到字符的存取,都需要考虑字符编码的问题。

字符编码这个知识点的典型特征就是理论多、结论少,但对于开发而言只需要记住结论即可

一.知识储备

1.大核心硬件

(1)软件运行前,代码及其相关数据都是存在在硬盘中

(2)任何软件的启动都是将数据从硬盘中读入内存,然后cpu从内存中取出指令执行

(3)软件运行过程当中产生的数据最先都是存放在内存当中的

2.文本编译器读取文件内容的流程

阶段1:启动一个文件编辑器(文本编辑器如nodepad++,pycharm,word)

阶段2:文件编辑器会将文件内容从硬盘读入内存

阶段3:文本编辑器会将刚刚读入内存中的内容显示到屏幕上

3.python解释器执行文件流程

阶段1:启动python解释器,此时就相当于启动了一个文本编辑器

阶段2:python解释器相当于文本编辑器,从硬盘上将test.py的内容读入到内存中

阶段3:python解释器解释执行刚刚读入的内存的内容,开始识别python语法

4.python解释器和文本解释器的异同

(1)相同点

前两个阶段二者完全一致,都是将硬盘中文件的内容读入内存

python解释器是解释执行文件内容的,因而python解释器具备读py文件的功能,这一点与文本编辑器一样

(2)不同点

在阶段3时,针对内存中读入的内容处理方式不同

文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不去理会python的语法,而python解释器会识别python语法,当功能去执行

二.字符编码介绍

1.什么是字符编码

人类与计算机交互时用的是人类可以读懂的字符,而计算机只能识别二进制,二进制是由01代码组成



翻译的过程必须参照一个特定的标准,该标准称之为字符骗码表,该表上存放的就是字符与数字一一对应的关系。

字符编码中的编码指的是翻译或者转换的意思,即将人能理解的字符翻译成计算机能识别的数字

输入一个字符,计算机将翻译成计算机识别的数字,再将这个数字翻译成输入的字符

上------------>翻译------------->010101------------->翻译------------->上

三.字符编码发展史

第一阶段:一家独大

现代计算机起源于美国,所以最先考虑仅仅是让计算机识别英文字符,于是诞生了ASClI表

ASCII表的特点:

1、只有英文字符与数字的一一对应关系

2、一个英文字符对应1Bytes,1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符



ASCII表只支持英文字符串

ASCII表采用8位二进制数对应一个英文字符

第二阶段:天下大乱

为了让计算机能够识别中文和英文,中国人定制了GBK

GBK表的特点:

1、只有中文字符、英文字符与数字的一一对应关系

2、采用8位二进制数对应一个英文字符

3、采用16位二进制数对应一个中文字符

补充说明:

1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符

2Bytes=16bit,16bit最多包含65536个数字,可以对应65536个字符,足够表示所有中文字符

每个国家都各自的字符,为让计算机能够识别自己国家的字符外加英文字符,各个国家都制定了自己的字符编码表

Shift_JIS表的特点:

1、只有日文字符、英文字符与数字的一一对应关系

Euc-kr表的特点:

1、只有韩文字符、英文字符与数字的一一对应关系

此时,美国人用的计算机里使用字符编码标准是ASCII、中国人用的计算机里使用字符编码标准是GBK、日本人用的计算机里使用字符编码标准是Shift_JIS



文本文件内容全都为字符,无论存取都是涉及到字符编码问题

1、存文本文件

人类通过文本编辑器输入的字符会被转化成ASCII格式的二进制存放于内存中,如果需要永久保存,则直接将内存中的ASCII格式的二进制写入硬盘

2、读文本文件

直接将硬盘中的ASCII格式的二进制读入内存,然后通过ASCII表反解成英文字符

阶段三:分久必合

unicode(内存中统一使用unicode):

1.兼容万国字符

与万国字符编码都有对应关系

2.采用16(16bit=2Bytes)位二进制数对应一个中文字符

个别生僻字会采用4Bytes,8Bytes

unicode表:

人类字符----------------unicode格式数字

字符编码不可以互相转,老的字符编码都可以转成unicode,但是不能通过unicode互转

Read more

Java 大视界 -- Java+Flink CDC 构建实时数据同步系统:从 MySQL 到 Hive 全增量同步(443)

Java 大视界 -- Java+Flink CDC 构建实时数据同步系统:从 MySQL 到 Hive 全增量同步(443)

Java 大视界 -- Java+Flink CDC 构建实时数据同步系统:从 MySQL 到 Hive 全增量同步(443) * 引言: * 正文: * 一、 核心认知:Flink CDC 与全增量同步逻辑 * 1.1 Flink CDC 核心原理 * 1.1.1 与传统数据同步方案的对比(实战选型参考) * 1.2 全增量同步核心逻辑(MySQL→Hive) * 1.2.1 关键技术点(实战必关注,每个点都踩过坑) * 二、 环境准备:生产级环境配置(可直接复用) * 2.1 核心依赖配置(pom.xml)

By Ne0inhk
【Java 开发日记】为什么要有 time _wait 状态,服务端这个状态过多是什么原因?

【Java 开发日记】为什么要有 time _wait 状态,服务端这个状态过多是什么原因?

目录 为什么要有 TIME_WAIT 状态? 原因一:可靠地终止TCP连接(确保最后的ACK能到达对方) 原因二:让旧连接的重复报文段在网络中自然消失(防止影响新连接) 服务端 TIME_WAIT 状态过多是什么原因? 原因一:服务端使用了短连接,并且是它主动关闭连接 原因二:客户端的非正常行为 原因三:负载均衡器的健康检查 总结 面试回答 为什么要有 TIME_WAIT 状态? TIME_WAIT,俗称2MSL等待状态,是TCP连接主动关闭一方(通常是客户端,但也可能是服务端)在发送最后一次ACK确认报文后,会进入的一个状态。它需要等待2倍的最大报文段生存时间后,才会最终进入CLOSED状态,释放连接资源。 设计TIME_WAIT状态主要有两个核心原因,它们是确保TCP协议可靠性的基石: 原因一:可靠地终止TCP连接(确保最后的ACK能到达对方) 这是最主要的原因。让我们回顾一下TCP四次挥手的正常流程: 1. 主动关闭方(假设为A)

By Ne0inhk

使用AI进行代码审查

ai-code-review 在日常开发中,我们经常会遇到一些问题,比如代码质量问题、安全问题等。如果我们每次都手动去检查,不仅效率低下,而且容易出错。 所以我们可以利用 AI 来帮助我们检查代码,这样可以提高我们的效率 那么,如何利用 AI 来检查代码呢? 在这里我先厚着脸皮要下star吧。一款基于AI进行代码审核的插件。插件地址,希望大家能支持下。 1. 使用 JS 脚本 这种方法其实就是写一个简单的脚本,通过调用 OpenAI 的 API,将代码提交给 AI 进行评审。 这里我们需要使用 Node.js 来实现这个功能。利用 git 的 pre-commit hooks,在 git 提交前执行这个脚本。整体流程如下: 接下来我们来具体实现下代码。在项目根目录下新建一个pre-commit.js文件,这个文件就是我们的脚本。 1.

By Ne0inhk
JAVA 异常处理:从原理到实战最佳实践

JAVA 异常处理:从原理到实战最佳实践

JAVA 异常处理:从原理到实战最佳实践 1.1 本章学习目标与重点 💡 掌握异常的分类与核心概念,理解异常处理的设计思想。 💡 熟练运用 try-catch-finally、throws、throw 处理异常。 💡 掌握自定义异常的编写与使用场景,规范异常处理流程。 ⚠️ 本章重点是 异常处理的最佳实践 和 避免常见误区,这是提升代码健壮性的核心技能。 1.2 异常的核心概念与分类 1.2.1 什么是异常 💡 异常是指程序运行过程中出现的非正常情况,它会中断程序的正常执行流程。 比如文件找不到、数组下标越界、空指针访问等,这些情况都会触发异常。 Java 中所有异常都是 Throwable 类的子类,异常处理的本质是捕获并处理这些非正常情况,保证程序可以继续运行或优雅退出。 1.2.2 异常的分类 Java 中的异常体系分为三大类,它们的父类都是 Throwable: * 是 JVM 内部的严重错误,

By Ne0inhk