檔案的編碼問題解決

2021-10-12 19:00:02 字數 2393 閱讀 2785

很多時候,我們需要在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的字...