用iconv 檔案格式轉換

2021-06-26 16:50:47 字數 2493 閱讀 3379

#!/bin/bash

files=`file * | grep "iso-8859" |cut -d ":" -f 1`

for i in `echo $files`

doiconv -f gbk -t utf-8 <$i >tmp

mv tmp $i

done

windows轉到linux中,檔案亂碼,檔案編碼轉換 

最近,學習又重新開始linux學習,所以一直在centos中,昨天一朋友把他在windows下寫的c程式發給我,我欣然答應,本以為很快就能在我的linux系統中執行起來。沒想到出現了亂碼,結果想把這個問題解決,一下子就搞了近三個小時沒有解決。今天,又想起來這個問題,竟然一下子就解決了,現在把學到的一些東西總結如下。

首先windows下的檔案拿到linux中來檢視出現亂碼是一種很常見的現象,這方面的資料在網上也有很多。但解決方法大多都類似,有些概念沒有解釋清楚,也許是個人沒有理解清楚。
嘗試方法一:
一碰到這個問題,我想到的是linux課上學到的乙個命令dos2unix,以前也沒用過,這次用了也沒有解決問題。
因為,這個命令主要是用來處理dos與linux之間斷行的差異的。dos下的文字檔案是以\r\n作為斷行標誌的,表示成十六進製制就是0d 0a。而unix下的文字檔案是以\n作為斷行標誌的,表示成十六進製制就是 0a。有時我們會遇到這樣一種情況,dos下的檔案在unix下顯示是不出現斷行,顯得很亂,這時用這個命令就ok。
後來在網上查了下,知道是編碼格式不一致導致的。因為dos下編輯的文字預設是以gbk儲存的,而linux預設採取的儲存方式是utf-8,當然會出現亂碼了,但是如何去將dos下的gbk檔案轉換成utf-8呢?
嘗試方法二:更改vim讀取時採用的編碼
先補充乙個知識,參考部落格

vim編碼方面的基礎知識:

存在3個變數:

fileencoding—-該選項是vim寫入檔案時採用的編碼型別。

termencoding—-該選項代表輸出到客戶終端(term)採用的編碼型別。

所以,我嘗試了在vim中
:set encoding
:set fileencoding=utf-8          #讓vim將gbk的文字轉換成utf-8後,顯示出來
經過這樣改了之後,果然,vim中看到的亂碼消失了,此時心情小小的激動了一下子。
但是,當我退出vim再次開啟檔案時,亂碼又出現了,原來是我更改的vim設定只是臨時的,所以我決定將其寫死到vim配置檔案當中去,操作如下:
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
這時,每次用vim開啟檔案時都不出現亂碼了,本以為問題解決了,我開始編譯程式,當我執行的時候,亂碼還是出現了。。。。此時,欲哭無淚
後來,我仔細想了一下,我更改vim的配置,只是讓我們看到的沒有亂碼,但從根本上講,檔案的編碼方式還是沒有變,所以當我用gcc編譯後,檔案的編碼格式應該還是gbk的。這樣導致的亂碼。所以,我決定找個工具,直接講gbk檔案轉換成utf-8。
嘗試三:
1.檢視檔案儲存格式
#file test.cpp
test.cpp: iso-8859 english text, with crlf line terminators
可以看出檔案是以iso-8859儲存的。
2.檢視系統語言設定
#cat /etc/sysconfig/i18n
lang="en_us.utf-8"

sysfont="latarcyrheb-sun16"

可以看出linux是以utf-8編碼的

3.利用工具將檔案從iso-8859轉換成utf-8(這裡我採用的是iconv命令)
#iconv -f iso-8859 -t utf-8 test.c -o test_u.c
這時竟然出現了乙個錯誤:
iconv: conversion from `iso-8859' is not supported
try `iconv --help' or `iconv --usage
解決方案:
將iso-8859換成gbk
#iconv -f gbk -t utf-8 test.c -o test_u.c
終於大功告成!
[1].
[2].
[3].

DOS檔案格式 與 UNIX檔案格式 轉換

這裡闡述兩種方法 1.使用vim的方法 在vim下 使用如下命令 set fileformat unix 就可轉換成 unix 檔案格式,也可使用其縮寫形式命令 set ff unix 直接輸入命令 set fileformat 或 set ff 還可查詢當前的命令格式。2.使用linux命令工具 ...

Python檔案格式轉換

將帶有點座標的 csv 轉 geojson,不帶其他屬性 import csv csv file open e test.csv encoding gbk csv reader csv.reader csv file geojson properties type feature float row...

檔案格式轉換神器 pandoc

by francis hao mar 11,2017 如果你需要在各種型別的檔案中穿梭,那麼你需要這把瑞士軍刀 pandoc 它可以將各種常見的不常見的檔案型別轉換成另一種,我感興趣的是在linux下將markdown檔案轉換成html,當然這不成問題。如果需要檢視全部支援的轉換格式,見 參考1 既...