編碼轉換 單個檔案存在多種編碼字符集

2022-08-21 13:06:11 字數 1488 閱讀 3048

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中檢視檔案編碼可以...