Python源码格式转换

1.文件格式侦测 - file 命令

[root@localhost sensor]# find stress/*| xargs file
stress/bi:                                                         directory
stress/bi/dynamic_cycles.py:                                       UTF-8 Unicode text, with CRLF line terminators
stress/bi/dynamic_margin.py:                                       Python script, UTF-8 Unicode text executable, with CRLF line terminators

...

...

stress/bi/stress_trendency.py:                                     C++ source, ASCII text, with CRLF line terminators
stress/bi/__pycache__:                                             directory
stress/bi/__pycache__/dynamic_cycles.cpython-311.pyc:              data
stress/bi/__pycache__/dynamic_margin.cpython-311.pyc:              data

...

...
stress/common:                                                     directory
stress/common/gp_comb_filter_related.py:                           Python script, UTF-8 Unicode text executable, with CRLF line terminators
stress/common/gp_converter.py:                                     troff or preprocessor input, UTF-8 Unicode text, with CRLF line terminators
stress/common/gp_filter_lof.py:                                    Python script, UTF-8 Unicode text executable, with CRLF line terminators
stress/common/gp_helper.py:                                        Python script, UTF-8 Unicode text 
stress/stress.py:                                                  Python script, UTF-8 Unicode text executable, with very long lines, with CRLF line terminators
stress/trash_code.py:                                              ASCII text, with CRLF line terminators

file命令的功能好强大。它不仅可以显示字符集,也可以显示文件的回车换行是否正常。

2.格式转换

2.1  utf8转换

下面针对几个ASCII编码的源码文件,将其转为UTF-8先。字符集转换,使用命令行工具iconv即可:

iconv -f GBK -t UTF-8 "/workerspace/sensor/common/gp_converter.py" -o "/workerspace/sensor/stress
/gp_converter.py"

2.2  crlf转换

对于crlf的替换,可以使用下面这个.py程序,它可以对某个目录中的所有文件去掉回车换行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# first version: v1.0.20231016 by fengxh&ChatGPTimport os
import subprocessdef gpIsFileAscIIEncoding(filepath):# 执行 file 命令,并捕获输出结果process = subprocess.Popen(["file", filepath], stdout=subprocess.PIPE, stderr=subprocess.PIPE)output, error = process.communicate()# 判断输出结果中是否包含 "ASCII" 字样if b"ASCII" in output:print("文件%s中包含 ASCII 字样" %(filepath))return True;else:#print("文件%s中不包含 ASCII 字样" %(filepath))return False;# 指定待处理的文件夹路径
folder_path = "/xx/xxx/common"# 获取当前脚本所在的目录路径
current_dir = os.path.dirname(os.path.abspath(__file__))# 设置当前路径为当前脚本所在的目录
os.chdir(current_dir)# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):file_path = os.path.join(folder_path, filename)# 判断是否为文件if os.path.isfile(file_path):with open(file_path, 'r') as file:content = file.read()# 替换换行符new_content = content.replace('\r\n', '\n')# 将修改后的内容写回原文件with open(file_path, 'w') as file:file.write(new_content)

原本打算在一个脚本里做完字符集转换和crlf->cr这两个动作,字符集转换那个步骤始终不成功。

附录A  unicoe字符集的知识

[root@localhost sensor]# iconv -f ASCII -t UTF-8 --verbose "trash_code.py" -o "trash_code.py.utf8" trash_code.py

[root@localhost sensor]# file trash*

trash_code.py: ASCII text

trash_code.py.utf8: ASCII text

[root@localhost sensor]#

根据你提供的命令和输出信息,看起来你正在将一个名为 “trash_code.py” 的 ASCII 文本文件转换为 UTF-8 编码。你使用了 iconv 命令,并使用了 ASCII 到 UTF-8 的转换选项。输出结果显示,原始文件和转换后的文件都被识别为 ASCII 文本文件。

>>怎么错了?

根据你提供的命令和输出信息,看起来转换过程没有出现错误。转换命令 iconv -f ASCII -t UTF-8 --verbose "trash_code.py" -o "trash_code.py.utf8" 指定将 “trash_code.py” 文件从 ASCII 编码转换为 UTF-8 编码,并将转换后的结果输出到 “trash_code.py.utf8” 文件中。输出结果显示两个文件都被识别为 ASCII 文本文件,这可能是因为转换后的文件内容在视觉上与原始文件相似。请说明具体的错误或不符合预期的情况,以便我更好地帮助你解决问题。

>>utf-8和ascii完全不同,对吧?

是的,UTF-8 和 ASCII 是不同的字符编码方案。

ASCII 是美国标准信息交换码,它定义了128个基本的字符,包括英文字母、数字和一些特殊字符。ASCII 仅使用一个字节(8位)来表示每个字符。

UTF-8 是一种可变长度的 Unicode 编码方案,它能够表示全球范围内的字符。UTF-8 使用可变长度的字节序列来表示不同的字符,英文字母和 ASCII 字符的编码与 ASCII 完全相同,仍然使用一个字节表示;而其他特殊字符和非 ASCII 字符则使用多个字节表示。

因此,UTF-8 是对 ASCII 编码的扩展,可以兼容 ASCII 编码,并且能够表示更多的字符。所以当你将一个 ASCII 编码的文件转换为 UTF-8 编码时,文件的内容在视觉上可能仍然相同,但实质上文件的编码方式已经改变了,可以支持更多种类的字符。

>>明白,谢谢!utf8中的双字节都用来表示什么?汉字是不是都位于3字节区?

在 UTF-8 编码中,双字节编码通常用于表示一些特殊字符、符号和一些非常用的字符。具体来说,UTF-8 中的双字节编码范围是 U+0080 至 U+07FF。

这个范围内包括了一些常用的西欧语言字符的扩展,如拉丁文扩展字母、重音符号和货币符号等。另外,一些亚洲文字的一部分也被编码在双字节范围内,如日文的假名片假名和一些常见的汉字。

至于汉字,UTF-8 编码中常用的汉字通常被编码为三个字节。具体的编码范围是 U+0800 至 U+FFFF。这部分编码包含了常用的汉字和一些其他语言的字符。

需要注意的是,UTF-8 是一种可变长度编码,所以字符的编码长度不是固定的,根据字符的 Unicode 码点值不同,编码长度也会不同。这使得 UTF-8 可以灵活地表示不同范围内的字符,并且能够节省存储空间。

>>utf-8 字符的最大的可能字节数是多少?

UTF-8 字符编码的最大字节数为4个字节。

UTF-8 编码使用不同长度的字节序列表示字符,其中包括1个、2个、3个和4个字节的字符编码。对于 Unicode 码点范围 U+0000 到 U+10FFFF,UTF-8 的编码方案可以表示所有字符。

具体分布如下:

  • 单字节:ASCII 字符,范围是 U+0000 到 U+007F。
  • 双字节:常见的拉丁文、希腊文、西里尔字母等,范围是 U+0080 到 U+07FF。
  • 三字节:包括一些汉字、日文假名和韩文字母,范围是 U+0800 到 U+FFFF。
  • 四字节:包括一些较罕见的字符和 Emoji 表情符号,范围是 U+10000 到 U+10FFFF。

需要注意的是,虽然 Unicode 码点范围是 U+0000 到 U+10FFFF,但实际上并不是所有的码点都有对应的字符。因此,实际使用的字符数量远远少于整个码点范围。

>>中间空缺的空洞用于什么目的?

Unicode 码点范围中的空洞是为了预留未来可能出现的字符而存在的。

由于 Unicode 的设计目标是覆盖全球范围内的字符,并且支持多种语言和符号系统,因此它的码点范围被分配到了相当大的范围内。然而,目前实际使用的字符数量远远少于整个范围,中间会出现空洞或未定义的码点。

这些空洞部分留给未来可能出现、尚未编码的字符使用。随着语言的发展和新字符的引入,Unicode Consortium负责制定 Unicode 标准的组织,会根据需求将新的字符或符号添加到空洞中。

通过预留空洞,Unicode 可以在一定程度上保持扩展性,以适应未来可能出现的字符需求,同时也确保了现有的字符不会受到后续字符的影响或破坏编码的一致性。

>>它包括所有的繁体中文吗?

是的,Unicode 包括了繁体中文字符。

Unicode 为了能够支持全球范围内的字符,包括了几乎所有的语言和符号系统,其中也包括了繁体中文字符。繁体中文字符包括了繁体字、繁体字变体和一些特殊的标点符号、注音符号等。

这些繁体中文字符在 Unicode 中分布在不同的码点范围内,使用 UTF-8 编码时,繁体中文字符通常被编码为三个字节的序列。

Unicode 提供了不同的字形变体来表示不同的繁体中文字符,可以通过正确的字符编码来显示和处理繁体中文文本。这使得繁体中文能够进行跨平台和跨系统的交流和共享。

>>有4字节表征的汉字吗?简体或者繁体?

在 Unicode 中,确实存在一些特定的汉字字符需要使用四个字节来表示。这些四字节编码的汉字通常属于较为罕见或生僻的汉字,并且常用的汉字大多数都能使用三字节进行表示。

这些四字节编码的汉字编码范围是 U+10000 到 U+10FFFF。它们属于 Unicode 的增补平面,也被称为“增补字符”。这个平面中的字符包括了一些少数民族文字、罕见的汉字变体、历史上的繁体字以及一些特殊符号。

需要注意的是,这些四字节编码的汉字通常不是常规情况下所使用的简体或繁体字符。对于绝大多数简体和繁体汉字,它们通常在 Unicode 中用三字节进行表示。四字节编码主要用于非常特殊的汉字和其他字符。

>>在设计字库时,它与字符集之间的转换关系,由谁负责?

在设计字库时,将字符集与相应的字形进行映射和转换的任务由字库设计师或字体设计师负责。

字库或字体是一种包含了各个字符的可视化呈现(字形)的集合。字库中的每个字符都需要与字符集中的相应字符进行对应,以便在文档、操作系统、应用程序等场景中正确地显示和处理文本数据。

字库设计师或字体设计师需要根据字符集的规范和标准,确定每个字符的编码和字形,并创建相应的字型文件。这个过程通常涉及独特的字体设计和字形轮廓的绘制,确保每个字符在不同的显示设备上以一致的方式呈现。

在很多情况下,Unicode 字符集被广泛采用作为字符编码的标准,并与常见的字体格式(如TrueType、OpenType等)关联。这样,字库设计师可以利用这些标准来确保字符和字形之间的正确映射和转换。

总之,字符集与字库之间的转换关系是由字库设计师或字体设计师负责协调和实现的。

>>utf-8和unicode似乎是两个概念?不同的字符集标准?

是的,UTF-8和Unicode确实是两个不同的概念,它们代表了不同的字符集标准。

Unicode是一种字符集标准,旨在涵盖世界上所有的字符,并为每个字符分配一个唯一的编码值,即码点。Unicode可以表示各种语言的字符,符号,标点符号和其他特殊字符。通过使用Unicode,可以实现全球范围内的文本交流和数据处理的一致性。

而UTF-8(Unicode Transformation Format-8)是一种Unicode字符编码方案,用于在计算机系统中以字节序列的形式存储和传输Unicode字符。它是针对Unicode字符集设计的一种可变长度编码方案,能够有效地表示Unicode字符集的所有字符。

UTF-8使用1到4个字节来表示不同的字符,其中ASCII字符使用一个字节表示,而其他Unicode字符则使用多个字节表示,字节的数量取决于字符的码点大小。UTF-8编码方案的优点是兼容ASCII标准,支持一致的字符表示,同时也实现了对Unicode字符集的高效编码和压缩。

因此,Unicode是一个字符集标准,定义了字符和编码值的对应关系,而UTF-8是Unicode的一种具体的字符编码方案,用于实现Unicode字符在计算机系统中的存储和传输

>>utf8是为了让unicode存储时节省空间,而设计的一种存储或者传输格式,对吧?

是的,你理解得很正确。

UTF-8 是为了在存储和传输Unicode字符时节省空间而设计的一种编码格式。它的设计目标是兼容ASCII字符集,使得纯英文文本在使用UTF-8编码后的存储空间与使用传统ASCII编码相同。对于非英文字符和较少使用的字符,UTF-8 使用多个字节来表示对应的Unicode字符编码,以便满足Unicode字符集的全部需求。

UTF-8 的变长编码特性使得它可以有效地表示各种字符,随着字符的范围增加,使用的字节长度也会相应增加。对于常用的 ASCII 字符,UTF-8 使用一个字节表示,而对于较少使用的 Unicode 字符,UTF-8 使用多个字节表示。这种设计可以节省存储空间和传输带宽,同时保持了对 Unicode 字符集的广泛支持。

因此,UTF-8 可以看作是一种在存储和传输过程中节省空间的、可变长度的编码格式,目的是为了更高效地处理和表示 Unicode 字符。

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

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

相关文章

低代码技术这么香,如何把它的开发特点发挥到极致?

前言 什么是低代码技术? 低代码是一种可视化软件开发方法,通过最少的编码更快地交付应用程序。图形用户界面和拖放功能使开发过程的各个方面自动化,消除了对传统计算机编程方法的依赖。 文章目录 前言低代码平台怎么选?用友Yonbu…

压缩炸弹,Java怎么防止

一、什么是压缩炸弹,会有什么危害 1.1 什么是压缩炸弹 压缩炸弹(ZIP):一个压缩包只有几十KB,但是解压缩后有几十GB,甚至可以去到几百TB,直接撑爆硬盘,或者是在解压过程中CPU飙到100%造成服务器宕机。虽然…

JOSEF约瑟 多档切换式漏电(剩余)继电器JHOK-ZBL1 30/100/300/500mA

系列型号: JHOK-ZBL多档切换式漏电(剩余)继电器(导轨) JHOK-ZBL1多档切换式漏电(剩余)继电器 JHOK-ZBL2多档切换式漏电(剩余)继电器 JHOK-ZBM多档切换式漏电&#xf…

Unity 3D基础——缓动效果

1.在场景中新建两个 Cube 立方体,在 Scene 视图中将两个 Cude的位置错开。 2.新建 C# 脚本 MoveToTarget.cs(写完记得保存) using System.Collections; using System.Collections.Generic; using UnityEngine;public class MoveToTarget : M…

Netty使用SslHandler实现加密通信-单向认证篇

引入依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.100.Final</version> </dependency>生成keystore.jks文件 keytool -genkeypair -alias your_alias -keyalg RSA -keysto…

系统与运维安全管理制度

1、总则 1.1、目的 为推动XXXXX单位系统安全管理的规范化、程序化、制度化&#xff0c;应按信息系统安全等级保护的相关要求&#xff0c;依据系统的保护等级&#xff0c;落实各系统各项的防护措施&#xff0c;进一步加强系统安全性&#xff0c;保障信息网络的安全、稳定运行&…

对工作还有Bar Raiser的一些感想

最近更新博客的频率降低了&#xff0c;很大一个原因是工作内容发生了变化&#xff0c;之前工作内容大数据开发占比较高。而现在的工作内容后端开发占比会更加多一点&#xff0c;比如 Spring全家桶、DDD 。而对技术没有深入的使用和研究&#xff0c;很难产出高质量的文章&#x…

在React中引用CSS方式及写法大全

文章目录 引用方式第一种&#xff1a;内联方式第二种&#xff1a;在组件引用 [name] .css文件第三种&#xff1a;在组件中引用[name] .scss文件第四种&#xff1a;在组件中引用[name].module.css文件 写法三种内联写法三元表达式引用module.css 引用方式 第一种&#xff1a;内…

定档通知2024中国(上海)国际品牌叉车展览会

时 间&#xff1a;2024年7月24&#xff5e;26日 地 点&#xff1a;上海国家会展中心 ◆ 》》》展会概况&#xff1a; 叉车在“搬运设备”中扮演着非常重要的角色&#xff0c;是机械化装卸、堆垛和短距离运输的高效设备。近年来&#xff0c;在“节能环保&#xff0c…

EF Core 7.0 新特性之批量修改

概要 EF Core 7.0 提供了一个可以将LINQ查询和批量修改相结合的方法ExecuteUpdate。由于数据修改是以批量更新的方式完成&#xff0c;所以可以减少数据库的往返次数。 本文将主要介绍ExecuteUpdate的使用方法。 代码和实现 基本案例 本文我们使用银行分行&#xff0c;ATM机…

GlobalTransactional

seata-spring的maven坐标&#xff1a; <dependency><groupId>io.seata</groupId><artifactId>seata-spring</artifactId><version>1.6.1</version> </dependency>GlobalTransactional注解的位置&#xff1a; io.seata.sprin…

SystemC入门学习-第8章 测试平台的编写

之前的章节&#xff0c;一直把重点放在用SystemC来描述硬件电路上&#xff0c;即如何编写SystemC 的RTL。本章的注意力集中在验证和编写测试平台上。 重点包括&#xff1a; 如何生成时钟信号和激励波形如何编写有响应能力的测试平台如何记录仿真结果 8.1 编写测试平台 测试平…

pytorch中的归一化函数

在 PyTorch 的 nn 模块中&#xff0c;有一些常见的归一化函数&#xff0c;用于在深度学习模型中进行数据的标准化和归一化。以下是一些常见的归一化函数&#xff1a; nn.BatchNorm1d, nn.BatchNorm2d, nn.BatchNorm3d&#xff1a; 这些函数用于批量归一化 (Batch Normalization…

论文阅读:Rethinking Range View Representation for LiDAR Segmentation

来源ICCV2023 0、摘要 LiDAR分割对于自动驾驶感知至关重要。最近的趋势有利于基于点或体素的方法&#xff0c;因为它们通常产生比传统的距离视图表示更好的性能。在这项工作中&#xff0c;我们揭示了建立强大的距离视图模型的几个关键因素。我们观察到&#xff0c;“多对一”…

JOSEF约瑟 漏电继电器 JD1-200 工作电压:380V 孔径:45mm 50~500mA

JD1系列漏电继电器 系列型号 JD1-100漏电继电器 JD1-200漏电继电器 JD1-250漏电继电器 JD1系列漏电继电器原为分体式固定式安装&#xff0c;为适应现行安装场合需要&#xff0c;上海约瑟继电器厂在产品原JD1一体式漏电继电器基础上进行产品升级&#xff0c;开发出现在较为…

【Rust基础①】基本类型、所有权与借用、复合类型

文章目录 1 基本类型1.1 数值类型1.1.1 Rust 中的内置的整数类型&#xff1a;1.1.2 浮点类型1.1.3 数学运算1.1.4 位运算1.1.5 序列(Range) 1.2 字符、布尔、单元类型1.3 语句和表达式1.4 函数 2 所有权与借用2.1 栈(Stack)与堆(Heap)2.2 所有权原则2.2.1 转移所有权2.2.2 克隆…

【Redis】Java Spring操作redis

目录 引入Redis依赖StringRedisTemplate使用String使用List使用Set使用hash使用zset 引入Redis依赖 StringRedisTemplate 此处RedisTemplate是把这些操作Redis的方法&#xff0c;分成了几个类别&#xff0c;分门别类的来组织的。 此处提供的一些接口风格&#xff0c;和原生的Re…

IP 协议的相关特性(部分)

IP 协议的报文格式 4位版本号&#xff1a; 用来表示IP协议的版本&#xff0c;现有的IP协议只有两个版本&#xff0c;IPv4&#xff0c;IPv6。 4位首部长度&#xff1a; 设定和TCP的首部长度一样 8位服务类型&#xff1a; &#xff08;真正只有4位才有效果&#xff09;&#xf…

Linux C/C++ 嗅探数据包并显示流量统计信息

嗅探数据包并显示流量统计信息是网络分析中的一种重要技术&#xff0c;常用于网络故障诊断、网络安全监控等方面。具体来说&#xff0c;嗅探器是一种可以捕获网络上传输的数据包&#xff0c;并将其展示给分析人员的软件工具。在嗅探器中&#xff0c;使用pcap库是一种常见的方法…

【TensorFlow2 之014】在 TF 2.0 中实现 LeNet-5

一、说明 在这篇文章中&#xff0c;我们将展示如何在 TensorFlow 中实现像 \(LeNet-5\) 这样的基础卷积神经网络。LeNet-5 架构由 Yann LeCun 于 1998 年发明&#xff0c;是第一个卷积神经网络。 数据黑客变种rs 深度学习 机器学习 TensorFlow 2020 年 2 月 29 日 | 0 …