一文搞懂文件在不同的平臺傳輸過程中的編碼轉換

1.文件存儲在磁盤上都是二進制流,物理上都是存儲的二進制。

2.文件分爲兩種:文本文件(ASCII)和二進制文件(Binary)。其實,文本文件是特殊的二進制文件,在磁盤上存儲的依然是二進制,

只不過存儲的二進制是用ASCII或Unicode進行了編碼的二進制。

二進制文件用內存中一樣的數據保存,保存在硬盤上就是二進制。

二進制文件和文本文件的區別在於:在打開的時候,程序對其內容的解釋上。

例子:

在eclipse中建立一個文件,敲下a,按下ctrl+s,這時候文件是有一個編碼的,是eclipse默認的編碼,假設是UTF-8。

a的UTF-8編碼是97,那麼實際上在磁盤上面存儲的是97的二進制形式1100001。當你使用eclipse打開這個文件時,eclipse的文本編輯器會做一個反向轉換,將二進制編碼轉換爲字符a。

 

爲什麼能夠轉換成功?因爲文件有一個文件頭記錄了文件的原始編碼,例子中就是UTF-8,eclipse也知道要被轉換爲的目標編碼,默認是UTF-8,這樣就能夠轉換成功。

不只是eclipse,任何的文本編輯器其實都是同一個道理,它在打開文件的時候,都會進行編碼轉換,當然在轉換的時候可能出現亂碼,因爲編輯器目標編碼與原始編碼的編碼表可能不是一一對應的。

 

遇到的問題:文件被zBuild從GitHub下載到z/OS上,文件的編碼發生了什麼樣的轉換?

Z/OS上的編碼默認的是IBM-1047。zBuild知道了目標編碼是IBM-1047,文件的原始編碼是UTF-8,這樣就可以將UTF-8轉換成IBM-1047了。

 

注意:文件在不同的平臺傳輸的時候(例如github到z/OS),編碼轉換隻會在文本文件上面發生,對於二進制文件是不會發生任何編碼轉換的。

一些jar包以及zip包,通常被當做二進制文件對待,這樣,對於jar包和zip包,不進行轉換,以免在不同的平臺中傳輸的時候,造成數據丟失。

 

通過在.gitattributes 文件中加入*.jar binary。可以讓git將所有的jar包當做二進制文件,這樣一來,在將github上的代碼拉取到z/OS上的時候,二進制文件就不會被當做文本文件,從而不會發生編碼轉換,jar包就不會出現破壞,出現打不開的情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章