any code text to utf8

# any code text to utf8python

 

```shelllinux

# 記錄src_path下全部源文件名,並添加到src_file_list.txt中,以便後面對每個文件轉換編碼程序員

find $src_path -name "*.h" >> src_file_list.txtshell

find $src_path -name "*.cpp" >> src_file_list.txtwindows

#......app

#其餘非文本文件 別進行識別和轉碼,容易損壞文件編輯器

```ide

 

```shellui

# 猜想文件的編碼類型編碼

# 由於識別文件編碼可能會出錯,這一步是最容易影響到編碼轉換正確率的,這裏使用file命令

file -i $src_file_name

# 輸出示例 to_utf8.cpp: text/x-c; charset=utf-8

# 輸出示例 TextEncoding.exe: application/x-dosexec; charset=binary

```

 

```shell

# 文件編碼格式轉換

# 使用iconv命令,將GBK編碼的src_file_name文件轉爲UTF8編碼,並將轉換後的結果寫入$src_file_name".tmp"中

iconv -f GBK -t UTF-8 -o $src_file_name".tmp" $src_file_name

# 編碼知識科普:數據在計算機存儲爲大量順序的0和1,稱爲二進制,文件也同樣。編碼指的軟件對這個文件的打開方式/解釋方式。一般所說的亂碼就是打開方式不對致使的[但願你用utf8打開,你卻用utf16的解析方式打開,解析出來就是一堆亂碼]

# 舉例:我在紙上寫了"小人",原意爲"卑鄙的人";一個古代人拿到這張紙,他覺得我寫的意思是"小孩子"。兩我的的理解就對不上了。文件-紙;小人-二進制數據;卑鄙的人-uft8解碼結果;小孩子-uft16解碼結果。固然有一些字詞古文和現代文解釋出來意思同樣。這樣的字詞無論用哪一種方式解釋都不會出現歧義/亂碼。

# 編碼歷史

# 1:ascii編碼:只支持英文字母/數字/少許符號。幾乎全部編碼方式 來打開 本該以ascii打開的文件 都不會亂碼。

# 2:中國經常使用編碼:GBK,gb2312,可以正確解釋中文和英文,其餘國文字不行。windows上容易出現。

# 4:windows經常使用編碼:utf16,utf或者unicode開頭的都是國際化編碼,及全部人類文字符號都能解釋。windows經常使用。

# 5:網頁經常使用編碼:utf8,國際化,省流量。最好用它。

# 6:程序內部字符串編碼:utf32,國際化,佔內存,可是每一個字符定長,寫代碼方便。

#以上編碼是會常常碰到的,固然還有其餘更多編碼方式。它們互不兼容,各幹各的。就算你把 應該用gb2312解碼的文本 給 utf8去解碼,utf8也能把它解出來顯示,可是隻要有中文就會被解釋錯,看上去就是亂碼。這也是亂碼發生的根因。在已經看到亂碼的狀況下,又被編輯器以錯誤(與原碼不一致及爲錯誤)的編碼方式保存一下,文件就完全損壞了。通過屢次錯誤,再也沒人知道它原來的樣子。

#若是你不想爲亂碼而煩惱,請把文本全轉爲utf8吧,它愈來愈流行了。若是你文本中只有英文,那無所謂用什麼編碼,由於幾乎全部編碼方式都能正確解析英文。

```

 

```shell

# UTF8 with BOM

# 如何識別一個文本文件是什麼編碼格式?最簡單的,以每一種編碼方式去打開同一個文件,肉眼去看有沒有亂碼,若是哪一種編碼方式打開後沒有亂碼,就算該文本屬於該編碼。一個文本字符較少時,可能被識別爲既是GBK,又是utf8。或者更多。

# 因此上述的 file 命令去識別文格式,也會有出錯的時候。

# windows怕本身識別不出UTF8編碼的文本,因而自做聰明的在utf8編碼的文件開頭插入了3個字節長的固定的不可見字符,用來方便識別是否是uft8編碼。這3個字節是 "\xef\xbb\xbf" 。開頭插入了這3個字節的utf8文本文件,叫作UTF8 with BOM,及UTF8-BOM

sed -i '1s/^\xef\xbb\xbf//g' $src_file_name #將文件開頭的BOM標記替換爲空(及刪去)

sed -i '1s/^/\xef\xbb\xbf/g' $src_file_name #將文件開頭加上BOM標記

# 以上是刪去和添加BOM標記的方法,建議不使用BOM,不多有編輯器須要它。

```

 

```shell

# 換行

# 有的字符被解析出來是不可見(如BOM),有的字符被解析出來會感受很特別,好比'\t',編輯器默認會顯示4個空格那麼寬的空白(固然編輯器能夠設置顯示2個空白格/8個空白格)。那 換一行再顯示 這個特效 用什麼字符表示呢?

# 分歧

# unix/linux:使用'\n'表示換行

# mac os:使用'\r'表示換行

# windows:使用'\r\n'表示換行。windows真是個和事佬,很中立嘛。

# 咱們固然但願個人項目源文件統一使用同一個換行符了

tr -d '\r' < $src_file_name > $src_file_name".tmp" #將文件中全部\r刪了

```

 

```shell

# table '\t'

# python程序員能夠略過

# 源文件中出現'\t'也是件很繁瑣的事情,大段大段的空白,通用作法是將'\t'替換爲幾個空格。

sed -i 's//    /g' $src_file_name #將文件中的換爲    。哈哈哈,是否是看不到我寫的字符,由於編輯器已經給你處理過了。

```

 

```shell

# 行末空格

# 若是行末多了幾個不可見字符,看也看不到,放在那又致使文件變大了。把它刪了吧!

sed -i 's/    $//g' $src_file_name

sed -i 's/   $//g' $src_file_name

sed -i 's/  $//g' $src_file_name

sed -i 's/ $//g' $src_file_name

```

any code text to utf8

 
 
 
 
# 記錄src_path下全部源文件名,並添加到src_file_list.txt中,以便後面對每個文件轉換編碼
find $src_path -name "*.h" >> src_file_list.txt
find $src_path -name "*.cpp" >> src_file_list.txt
#......
#其餘非文本文件 別進行識別和轉碼,容易損壞文件
 
 
 
 
 
# 猜想文件的編碼類型
# 由於識別文件編碼可能會出錯,這一步是最容易影響到編碼轉換正確率的,這裏使用file命令
file -i $src_file_name
# 輸出示例 to_utf8.cpp: text/x-c; charset=utf-8
# 輸出示例 TextEncoding.exe: application/x-dosexec; charset=binary
 
 
 
 
 
# 文件編碼格式轉換
# 使用iconv命令,將GBK編碼的src_file_name文件轉爲UTF8編碼,並將轉換後的結果寫入$src_file_name".tmp"中
iconv -f GBK -t UTF-8 -o $src_file_name".tmp" $src_file_name
# 編碼知識科普:數據在計算機存儲爲大量順序的0和1,稱爲二進制,文件也同樣。編碼指的軟件對這個文件的打開方式/解釋方式。一般所說的亂碼就是打開方式不對致使的[但願你用utf8打開,你卻用utf16的解析方式打開,解析出來就是一堆亂碼]
# 舉例:我在紙上寫了"小人",原意爲"卑鄙的人";一個古代人拿到這張紙,他覺得我寫的意思是"小孩子"。兩我的的理解就對不上了。文件-紙;小人-二進制數據;卑鄙的人-uft8解碼結果;小孩子-uft16解碼結果。固然有一些字詞古文和現代文解釋出來意思同樣。這樣的字詞無論用哪一種方式解釋都不會出現歧義/亂碼。
# 編碼歷史
# 1:ascii編碼:只支持英文字母/數字/少許符號。幾乎全部編碼方式 來打開 本該以ascii打開的文件 都不會亂碼。
# 2:中國經常使用編碼:GBK,gb2312,可以正確解釋中文和英文,其餘國文字不行。windows上容易出現。
# 4:windows經常使用編碼:utf16,utf或者unicode開頭的都是國際化編碼,及全部人類文字符號都能解釋。windows經常使用。
# 5:網頁經常使用編碼:utf8,國際化,省流量。最好用它。
# 6:程序內部字符串編碼:utf32,國際化,佔內存,可是每一個字符定長,寫代碼方便。
#以上編碼是會常常碰到的,固然還有其餘更多編碼方式。它們互不兼容,各幹各的。就算你把 應該用gb2312解碼的文本 給 utf8去解碼,utf8也能把它解出來顯示,可是隻要有中文就會被解釋錯,看上去就是亂碼。這也是亂碼發生的根因。在已經看到亂碼的狀況下,又被編輯器以錯誤(與原碼不一致及爲錯誤)的編碼方式保存一下,文件就完全損壞了。通過屢次錯誤,再也沒人知道它原來的樣子。
#若是你不想爲亂碼而煩惱,請把文本全轉爲utf8吧,它愈來愈流行了。若是你文本中只有英文,那無所謂用什麼編碼,由於幾乎全部編碼方式都能正確解析英文。
 
 
 
 
 
# UTF8 with BOM
# 如何識別一個文本文件是什麼編碼格式?最簡單的,以每一種編碼方式去打開同一個文件,肉眼去看有沒有亂碼,若是哪一種編碼方式打開後沒有亂碼,就算該文本屬於該編碼。一個文本字符較少時,可能被識別爲既是GBK,又是utf8。或者更多。
# 因此上述的 file 命令去識別文格式,也會有出錯的時候。
# windows怕本身識別不出UTF8編碼的文本,因而自做聰明的在utf8編碼的文件開頭插入了3個字節長的固定的不可見字符,用來方便識別是否是uft8編碼。這3個字節是 "\xef\xbb\xbf" 。開頭插入了這3個字節的utf8文本文件,叫作UTF8 with BOM,及UTF8-BOM
sed -i '1s/^\xef\xbb\xbf//g' $src_file_name #將文件開頭的BOM標記替換爲空(及刪去)
sed -i '1s/^/\xef\xbb\xbf/g' $src_file_name #將文件開頭加上BOM標記
# 以上是刪去和添加BOM標記的方法,建議不使用BOM,不多有編輯器須要它。
 
 
 
 
 
# 換行
# 有的字符被解析出來是不可見(如BOM),有的字符被解析出來會感受很特別,好比'\t',編輯器默認會顯示4個空格那麼寬的空白(固然編輯器能夠設置顯示2個空白格/8個空白格)。那 換一行再顯示 這個特效 用什麼字符表示呢?
# 分歧
# unix/linux:使用'\n'表示換行
# mac os:使用'\r'表示換行
# windows:使用'\r\n'表示換行。windows真是個和事佬,很中立嘛。
# 咱們固然但願個人項目源文件統一使用同一個換行符了
tr -d '\r' < $src_file_name > $src_file_name".tmp" #將文件中全部\r刪了
 
 
 
 
 
# table '\t'
# python程序員能夠略過
# 源文件中出現'\t'也是件很繁瑣的事情,大段大段的空白,通用作法是將'\t'替換爲幾個空格。
sed -i 's//   /g' $src_file_name #將文件中的換爲   。哈哈哈,是否是看不到我寫的字符,由於編輯器已經給你處理過了。
 
 
 
 
 
# 行末空格
# 若是行末多了幾個不可見字符,看也看不到,放在那又致使文件變大了。把它刪了吧!
sed -i 's/   $//g' $src_file_name
sed -i 's/   $//g' $src_file_name
sed -i 's/ $//g' $src_file_name
sed -i 's/ $//g' $src_file_name
相關文章
相關標籤/搜索