Linux下文件名长度限制

Linux下文件名长度限制

出现场景:在迭代中有一个需求是将pdf文件名修改成全部班级的名称集合,出现的班级过多致使的文件名过长在linux下没法建立文件和文件夹的状况

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

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

字符java

简介:字符简单的来讲就是咱们平常生活中用到的一些字符,好比数字、汉字、标点符号等。专业的介绍能够参考百度百科) linux

字节segmentfault

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

编码编码

简介:其实 编码 就是将字符转为二进制的规则,由于咱们知道计算机是经过 高电平 和 低电平 来分别表明 1 和 0,想让计算机读懂咱们的字符,就须要将 二进制数 和咱们的字符创建一个映射关系,这个过程就叫编码。其实每一个人均可以定义本身的编码规则,可是这样就乱套了。因此一些组织就制定了统一的编码规则。也就出现了咱们常见的 ASCII 、unicode 等编码规则code

字符集orm

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

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-八、UTF-16。而是 UCS-2,具体缘由是由于javascript诞生的时候,尚未UTF-16,可是好在UCS的码点和unicode一致,因此他们是互相兼容的。二者的关系简单说,就是UTF-16取代了UCS-2,或者说UCS-2整合进了UTF-16。因此,如今只有UTF-16,没有UCS-2。

总结:

  1. Unicode是一个简单的标准,用来把字符映射到数字上。Unicode协会的人会帮你处理全部幕后的问题,包括为新字符指定编码。
  2. Unicode并不告诉你字符是怎么编码成字节的。这是被编码方案决定的,经过UTF来指定。
  3. 这个世界上历来没有纯文本这回事,若是你想读出一个字符串,你必须知道它的编码
  4. 字符集和编码是不一样的,字符集是指定的数字和字符的映射,而编码则是将指定的字符对应的数字存储在计算机中的过程。
  5. 编码是很复杂的过程,其中涉及到的砖码,基本平面,辅助平面等概念在本文中都没有提到,具体的实现过程能够参考下面的阮一峰相关的资料。

参考资料:

相关文章
相关标签/搜索