Linux下文件名长度限制

出现场景:在迭代中有一个需求是将pdf文件名修改为所有班级的名称集合,出现的班级过多导致的文件名过长在linux下无法创建文件和文件夹的情况

解决方式:经过查证,linux中文件名最长为255字符,文件路径最大长度为4096字符。所以需要对班级名称进行截断,并且不仅仅是根据字符串长度截断,而是根据每一个字母或者汉字对应的字符来计算得到最后的文件名小于255个字符。

鉴于以上场景,于是进行稍微的深究,对字符编码相关的知识进行了一个深一步的学习

字符

简介:字符简单的来说就是我们日常生活中用到的一些字符,比如数字、汉字、标点符号等。专业的介绍可以参考百度百科)

字节

简介:计算机中的一个计量存储容量的单位,常见的计算机中一个字节代表八位的二进制数

编码

简介:其实 编码 就是将字符转为二进制的规则,因为我们知道计算机是通过 高电平 和 低电平 来分别代表 1 和 0,想让计算机读懂我们的字符,就需要将 二进制数 和我们的字符建立一个映射关系,这个过程就叫编码。其实每个人都可以定义自己的编码规则,但是这样就乱套了。所以一些组织就制定了统一的编码规则。也就出现了我们常见的 ASCII 、unicode 等编码规则

字符集

ASCII(字符集):建立了128个字符对应的数字编号,仅支持英文字母、一些标点符号、以及一些不可显示的字符。

unicode (万国码 字符集):Unicode只是一个用来映射字符和数字的标准。它对支持字符的数量没有限制,也不要求字符必须占两个、三个或者其它任意数量的字节。Unicode并不涉及字符是怎么在字节中表示的,它仅仅指定了字符对应的数字。归根结底,unicode就是把世界上所有的字符都和一个数字做对应,但是具体到这个数字在计算机中如何表示,他是不管的。

关于Unicode的其它误解包括:Unicode支持的字符上限是65536个,Unicode字符必须占两个字节,这些都不正确。

Unicode字符是怎样被编码成内存中的字节这是另外的话题,它是被UTF(Unicode Transformation Formats)定义的。

unicode的问题:比如,汉字严的 Unicode 是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说,这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别 Unicode 和 ASCII ?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。于是出现了对unicode字符集的不同的编码方式

常见的编码规则

ASCII码的编码规则:每个二进制位(bit)有 0 1 两个状态,因此八个二进制位就能够组成 256 种不同的状态,也就是 00000000 - 11111111,由于ASCII字符集定义了128个字符,八个二进制位能够表达 256 个状态,所以肯定是够用了,所以在 ASCII 码中一个字符只占一个字节(一个字节 === 8 bit)

UTF-8:是一种unicode的编码方案,在UTF-8中,0-127号的字符用1个字节来表示,使用和US-ASCII相同的编码。这意味着1980年代写的文档用UTF-8打开一点问题都没有。只有128号及以上的字符才用2个,3个或者4个字节来表示。因此,UTF-8被称作可变长度编码,它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-16:另一个流行的可变长度编码方案是UTF-16,它使用2个或者4个字节来存储字符。

javascript中的字符编码

js中用的编码方式不是UTF-8、UTF-16。而是 UCS-2,具体原因是因为javascript诞生的时候,还没有UTF-16,但是好在UCS的码点和unicode一致,所以他们是互相兼容的。两者的关系简单说,就是UTF-16取代了UCS-2,或者说UCS-2整合进了UTF-16。所以,现在只有UTF-16,没有UCS-2。

总结:

Unicode是一个简单的标准,用来把字符映射到数字上。Unicode协会的人会帮你处理所有幕后的问题,包括为新字符指定编码。

Unicode并不告诉你字符是怎么编码成字节的。这是被编码方案决定的,通过UTF来指定。

这个世界上从来没有纯文本这回事,如果你想读出一个字符串,你必须知道它的编码

字符集和编码是不同的,字符集是指定的数字和字符的映射,而编码则是将指定的字符对应的数字存储在计算机中的过程。

编码是很复杂的过程,其中涉及到的砖码,基本平面,辅助平面等概念在本文中都没有提到,具体的实现过程可以参考下面的阮一峰相关的资料。

参考资料:

python路径长度限制,Linux下文件名长度限制相关推荐

  1. Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法

    Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法 文件是在WIndows 下创建的,Windows 的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码 不 ...

  2. linux 升级python 3.5,Linux下升级Python到3.5.2版本

    本文主要介绍在Linux(CentOS)下将Python的版本升级为3.5.2的方法 众所周知,在2020年python官方将不再支持2.7版本的python,所以使用3.x版本的python是必要的 ...

  3. Python实战之Linux 下脚本编写的“奇技淫巧“

    写在前面 对于自动化运维来讲Python是一个利器 常用的自动化运维工具Ansible就是通过python编写 博文为<Python Cookbook>读书笔记整理而来 涉及的内容都是编写 ...

  4. linux中文文件名长度ftp无法传输,上传ftp时文件名不能太长

    ftp上传不了多个汉字文件名的文件. server-U11安装后,ftp上传文件时,必须使用英文字符或数据的文件名才能进入ServerU管理端界面,点击"服务器限制和设置"分类功能 ...

  5. linux下载哪个python版本-修改linux下python的默认版本

    linux下python版本默认为python2.7,下面将通过操作在linux系统下修改python的默认版本. 本文linux系统使用的是ubuntu19. 操作: 1.在shell下输入pyth ...

  6. python变量名长度有限制吗_怎么去除 Python 下载文件时的文件名长度 50 限制

    我使用 urllib.request.urlretrieve(fileLink,fileNmae) 进行批量文件下载时报错 正在下载:agentx1_1.1.0-8bb70d4416f9574086b ...

  7. 【Python 笔记】Linux下安装pip方法的全总结

    本文研究记录了 Linux 下安装 pip 的全部方法. 文章目录 1. 通过 Linux 系统的包管理工具安装 1.1 apt 包管理工具安装 pip 1.1.1 安装 1.1.2 升级 1.1.3 ...

  8. Linux下python的命令,linux下python相关命令

    若本机已安装python2,尽量不要动现有的python2,额外安装python3即可. 1.安装python3.6(centos下安装python3自带pip和setuptools) # 安装依赖环 ...

  9. linux下import包中的模块,关于python:在Linux下将pyw文件导入为模块

    我从一个用Python for Windows编写的同事那里得到了一些代码. 他正在使用几个模块,其中文件的扩展名为mymodule.pyw而不是mymodule.py. 这只是通过做 import ...

最新文章

  1. Python去除字符串前后空格
  2. 一个实体对象不能由多个 IEntityChangeTracker 实例引用
  3. 多线程(6)线程同步
  4. 从.Net到Java学习第四篇——spring boot+redis
  5. python输入序列语句_Python基础教程(一) - 序列:字符串、列表和元组
  6. note2 android4.3,玩家们动手吧 Note2安卓4.3固件已泄漏
  7. 使用WORD封面自带模板?
  8. 接口测试学习入门(1)--前期知识储备
  9. Spring小学习小结2
  10. Silverlight WCF RIA服务(十七)数据 7
  11. java构造器基本语法_Java语言中的定义变量、构造函数
  12. 深度相机原理揭秘之结构光法
  13. 4.shell脚本中的变量
  14. 别了,AlphaGo之魂——黄士杰
  15. Design Compiler工具学习笔记(7)
  16. (笔记本)电脑WLAN 点不开,显示WLAN 已关闭。
  17. 百宝箱-Rime配置
  18. 轻开B2C电子商务网站(20141231版)发布手册
  19. notepad ++ 百度云下载
  20. 太魔性!甘肃博物馆这匹马“不太正经”

热门文章

  1. 这份java突击核心面试宝典(原理+应用+源码+调优),闯进大厂
  2. magento 赠品_免费赠品发布:社交媒体垃圾壁纸
  3. 计算机网络教学案例,《计算机网络基础》教学案例
  4. python deepcopy浪费时间_Python copy(), deepcopy()
  5. Activiti-businessRuleTask(业务规则任务)
  6. 京东自动签到(利用github实现)+Cookie失效解决办法
  7. POJ3273:Monthly Expense(二分)
  8. vscode隐藏.pyc文件
  9. 强化学习中Sparse Reward问题该怎么解决?
  10. python的jieba语法_Python jieba库分词