linux
檔案中存在多行編碼不一致的情況,這個時候對整個檔案的編碼轉換報錯導致的編碼轉換失敗,這裡做乙個總結。可能產生的原因
檔案存在編碼不一致的行
此時檔案內容
檔案內容
檔案中存在有些行使用的編碼字符集不一致的情況,這個時候如果使用iconv直接對檔案轉換編碼會報錯。
報錯資訊
如果能使用file命令直接檢視出來檔案的編碼格式,通過iconv命令轉換基本就不會報錯了。
確定某些行的格式,迴圈檔案每行進行轉換,對無法轉換的行單獨輸出到乙個檔案中,然後再確定無法轉換的檔案的格式。
#
指定需要轉換的檔案
export file="example";
#抽取檔案中的一行來確定本行檔案的編碼
firstline=`sed -n '1p' "$"`; for coded in `iconv --list | sed 's/\/\/$//' | sort`; do echo "$" | iconv -f "$" -t utf-8 && echo "$:ok"; done | tee encoding.result;
此時去檢視encoding.result中對文字第一行轉換完成之後的文字編碼。
第一行的編碼
通過上一行確定的utf-8轉換檔案輸出到succeed.result,然後轉換失敗的輸出到fail.result(遍歷檔案每行轉換)。
#
遍歷檔案每一行轉換
while read line; do echo "$" | iconv -f utf-8 -t utf-8 >> succeed.result || echo "$" >> fail.result; done < $ &
轉換完成之後(gbk等為gb8030子集的編碼都可用gb18030轉換)
轉換完成之後
對於大檔案轉換特別慢,可以用split切換為多個檔案,對部分檔案直接針對檔案轉換,失敗的再使用遍歷逐行轉換。
#
定時檢視檔案是否轉換完成一直轉換之後的行數(pid替換為4步驟中的shell返回的pid)
watch -n 5 "ps -ef | grep -v grep | grep pid; [ -f succeed.result ] && wc succeed.result; [ -f fail.result ] && wc fail.result;";
(編碼轉換)轉換檔案編碼
目錄 1 轉換編碼種類 2 轉編碼操作步驟 1 轉換編碼種類 可轉為 utf 8 最常用 ansi unicode unicode big endian 這四類編碼 2 轉換編碼操作步驟 1 將檔案以記事本方式開啟 注意 如果不可以請先將檔案轉換為 csv 檔案,再以記事本開啟 2 點選記事本左上方...
檔案編碼轉換
檔案編碼轉換 class transcoding 設定檔案路徑 param filepath public function setfilepath filepath return false 取得檔案路徑 public function getfilepath 檔案編碼轉換 param file ...
檔案編碼轉換
如果你需要在linux中操作windows下的檔案,那麼你可能會經常遇到檔案編碼轉換的問題。windows中預設的檔案格式是 gbk gb2312 而linux一般都是utf 8。下面介紹一下,在linux中如何檢視檔案的編碼及如何進行對檔案進行編碼轉換。檢視檔案編碼 在linux中檢視檔案編碼可以...