很多時候,我們需要在linux(ubuntu,centos等)、mac和windows之間共享一些檔案,但是因為各個平台自帶支援的編碼不一致,有的是gb2312(window預設),有的是utf-8。導致跨平台無法正確開啟檔案,比如windows下的gb2312編碼檔案放到mac下,如果mac沒有安裝gb2312解碼器,那開啟就亂碼。這裡總結了檔案格式的相互轉換,目標當然是全球統一的utf-8,utf-16等utf系列編碼。
windows平台可以通過notepad ++ 檢視檔案的編碼,同時也可以儲存為指定編碼的問題檔案,比如下圖,檢視是ansi格式編碼。
轉換時,只需要選擇對應的編碼格式,下方可以轉為utf-8或其他編碼,如下圖:
# 檢視指定檔案的編碼格式
enca -l zh_cn filename # 或者
enca filename
# 檢視當前目錄下所有檔案的編碼
enca `ls` # 引號為tab鍵上方的字元
如下圖檢視當前檔案的字元編碼,有gb2312,有7個二進位制編碼的檔案(一行對應乙個檔案)。
檔案**現了部分檔案是 7bit ascii characters的檔案,這是因為整個檔案中沒有中文字元,所以就這樣顯示,如果你寫兩個中文字元到檔案中,你會神奇的發現編碼格式顯示為utf-8。
# 轉換指定檔案到utf-8
enca -l zh_cn -x utf-8 filename //或
enca -x utf-8 filename
# 轉換當前目錄下所有檔案到utf-8
enca -l zh_cn -x utf-8 * # 或
enca -x utf-8 *
轉換格式後檢視結果如下:
cli="find . -type f \( "
for arg in $
docli="$cli -iname \*.$arg -o "
done
cli="$cli -iname \*.$ \)"
#echo $cli
pre_ifs=$ifs
ifs=$'\n'
for i in `eval $cli`
do enca -x utf-8 $i
done
ifs=$pre_ifs
echo
"ok!"
其實作為乙個開發人員,完成可以寫個如python的指令碼,來遍歷多層子檔案,python指令碼如下:
import os
import sys
defrecursive_visitor
(file_dir)
:for filename in os.listdir(file_dir)
:# filter some file
if filename.startswith(
'.')
:continue
# only convert py file to utf-8
file_path = os.path.join(file_dir, filename)
if os.path.isfile(file_path)
and filename.endswith(
'.py'):
cmd_str =
"enca -x utf-8 %s"
% file_path
ret = os.system(cmd_str)
if ret:
print
("-- convert file to utf-8 failed, please check the file: {} ----"
.format
(file_path)
) sys.exit(1)
if os.path.isdir(file_path)
: recursive_visitor(file_path)
Python 檔案編碼問題解決
最近使用python操作檔案,經常遇到編碼錯誤的問題,例如 unicodedecodeerror utf 8 codec can t decode byte 0xbe in position 350 in encoding utf 8 雖然這種類似的方法也能解決。但是這種方法只能靠運氣去碰,如果剛好...
mysql編碼問題解決
首先需要在建立表的時候,將編碼規定。具體如下 create databasetest character set utf8 collate utf8 general ci engine innodb default charset utf8 補救措施 1.檢視預設編碼集 show variables...
Mysql中文編碼問題解決
最近在進行hive的元資料中文注釋的同步,遇到了mysql中文編碼是亂碼問題,現在總結一下mysql編碼的基本原理。我們傳統意義上的說的編碼其實是指字符集,它包括兩個方面,一是儲存字元,二是對映關係,也就是真正的編碼,各種字符集的儲存字元都差不多,而編碼卻各不相同,是真正有威力的地方。mysql的字...