成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Linux下文件名長度限制

entner / 1366人閱讀

摘要:下文件名長度限制出現(xiàn)場景在迭代中有一個需求是將文件名修改為所有班級的名稱集合,出現(xiàn)的班級過多導致的文件名過長在下無法創(chuàng)建文件和文件夾的情況解決方式經(jīng)過查證,中文件名最長為字符,文件路徑最大長度為字符。這是被編碼方案決定的,通過來指定。

Linux下文件名長度限制
出現(xiàn)場景:在迭代中有一個需求是將pdf文件名修改為所有班級的名稱集合,出現(xiàn)的班級過多導致的文件名過長在linux下無法創(chuàng)建文件和文件夾的情況

解決方式:經(jīng)過查證,linux中文件名最長為255字符,文件路徑最大長度為4096字符。所以需要對班級名稱進行截斷,并且不僅僅是根據(jù)字符串長度截斷,而是根據(jù)每一個字母或者漢字對應的字符來計算得到最后的文件名小于255個字符。

鑒于以上場景,于是進行稍微的深究,對字符編碼相關的知識進行了一個深一步的學習

字符

簡介:字符簡單的來說就是我們?nèi)粘I钪杏玫降囊恍┳址?,比如?shù)字、漢字、標點符號等。專業(yè)的介紹可以參考百度百科)

字節(jié)

簡介:計算機中的一個計量存儲容量的單位,常見的計算機中一個字節(jié)代表八位的二進制數(shù)

編碼

簡介:其實 編碼 就是將字符轉為二進制的規(guī)則,因為我們知道計算機是通過 高電平 和 低電平 來分別代表 1 和 0,想讓計算機讀懂我們的字符,就需要將 二進制數(shù) 和我們的字符建立一個映射關系,這個過程就叫編碼。其實每個人都可以定義自己的編碼規(guī)則,但是這樣就亂套了。所以一些組織就制定了統(tǒng)一的編碼規(guī)則。也就出現(xiàn)了我們常見的 ASCII 、unicode 等編碼規(guī)則

字符集

ASCII(字符集):建立了128個字符對應的數(shù)字編號,僅支持英文字母、一些標點符號、以及一些不可顯示的字符。

unicode (萬國碼 字符集):Unicode只是一個用來映射字符和數(shù)字的標準。它對支持字符的數(shù)量沒有限制,也不要求字符必須占兩個、三個或者其它任意數(shù)量的字節(jié)。Unicode并不涉及字符是怎么在字節(jié)中表示的,它僅僅指定了字符對應的數(shù)字。歸根結底,unicode就是把世界上所有的字符都和一個數(shù)字做對應,但是具體到這個數(shù)字在計算機中如何表示,他是不管的。

關于Unicode的其它誤解包括:Unicode支持的字符上限是65536個,Unicode字符必須占兩個字節(jié),這些都不正確。

Unicode字符是怎樣被編碼成內(nèi)存中的字節(jié)這是另外的話題,它是被UTF(Unicode Transformation Formats)定義的。

unicode的問題:比如,漢字的 Unicode 是十六進制數(shù)4E25,轉換成二進制數(shù)足足有15位(100111000100101),也就是說,這個符號的表示至少需要2個字節(jié)。表示其他更大的符號,可能需要3個字節(jié)或者4個字節(jié),甚至更多。

這里就有兩個嚴重的問題,第一個問題是,如何才能區(qū)別 Unicode 和 ASCII ?計算機怎么知道三個字節(jié)表示一個符號,而不是分別表示三個符號呢?第二個問題是,我們已經(jīng)知道,英文字母只用一個字節(jié)表示就夠了,如果 Unicode 統(tǒng)一規(guī)定,每個符號用三個或四個字節(jié)表示,那么每個英文字母前都必然有二到三個字節(jié)是0,這對于存儲來說是極大的浪費,文本文件的大小會因此大出二三倍,這是無法接受的。于是出現(xiàn)了對unicode字符集的不同的編碼方式

常見的編碼規(guī)則

ASCII碼的編碼規(guī)則:每個二進制位(bit)有 0 1 兩個狀態(tài),因此八個二進制位就能夠組成 256 種不同的狀態(tài),也就是 00000000 - 11111111,由于ASCII字符集定義了128個字符,八個二進制位能夠表達 256 個狀態(tài),所以肯定是夠用了,所以在 ASCII 碼中一個字符只占一個字節(jié)(一個字節(jié) === 8 bit)

UTF-8:是一種unicode的編碼方案,在UTF-8中,0-127號的字符用1個字節(jié)來表示,使用和US-ASCII相同的編碼。這意味著1980年代寫的文檔用UTF-8打開一點問題都沒有。只有128號及以上的字符才用2個,3個或者4個字節(jié)來表示。因此,UTF-8被稱作可變長度編碼,它可以使用1~4個字節(jié)表示一個符號,根據(jù)不同的符號而變化字節(jié)長度。

UTF-16:另一個流行的可變長度編碼方案是UTF-16,它使用2個或者4個字節(jié)來存儲字符。

javascript中的字符編碼

js中用的編碼方式不是UTF-8、UTF-16。而是 UCS-2,具體原因是因為javascript誕生的時候,還沒有UTF-16,但是好在UCS的碼點和unicode一致,所以他們是互相兼容的。兩者的關系簡單說,就是UTF-16取代了UCS-2,或者說UCS-2整合進了UTF-16。所以,現(xiàn)在只有UTF-16,沒有UCS-2。

總結:

Unicode是一個簡單的標準,用來把字符映射到數(shù)字上。Unicode協(xié)會的人會幫你處理所有幕后的問題,包括為新字符指定編碼。

Unicode并不告訴你字符是怎么編碼成字節(jié)的。這是被編碼方案決定的,通過UTF來指定。

這個世界上從來沒有純文本這回事,如果你想讀出一個字符串,你必須知道它的編碼

字符集和編碼是不同的,字符集是指定的數(shù)字和字符的映射,而編碼則是將指定的字符對應的數(shù)字存儲在計算機中的過程。

編碼是很復雜的過程,其中涉及到的磚碼,基本平面,輔助平面等概念在本文中都沒有提到,具體的實現(xiàn)過程可以參考下面的阮一峰相關的資料。

參考資料:

字符編碼筆記:ASCII,Unicode 和 UTF-8 阮一峰

學點編碼知識又不會死:Unicode的流言終結者和編碼大揭秘

javascript基礎之字符集與編碼

Unicode與JavaScript詳解 阮一峰

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/106494.html

相關文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<