Linux系统下文件字体乱码的解决方案
???????在Linux系統下經常會遇到從網上下載的文件,打開是亂碼的情況,尤其是含有中文字符的txt文件或者是一些后綴為 .srt、.ass的字幕文件,其原因大多是因為這些文件的編碼格式為gb18030編碼格式,而這種文件的編碼格式雖然在windows下可以直接打開,在linux下卻會出現奇奇怪怪的亂碼情況。作為日常使用ubuntu系統的偽技術宅,碰到文件打開是亂碼的情況不說遇到100次,也至少遇到了有50次,對于這種問題的解決方案也頗有心得。
???????說是解決方案,聽起來好像很復雜,其實真正處理起來,不過是一行語句的問題,先附上語句:
sudo iconv -f "gb18030" -t "utf-8" original_filename > new_filename看,其實很簡單,就是修改一下original_filename和new_filename為自己要更改的文件即可,簡單地說就是把原有的gb18030編碼格式的文件轉化為utf-8編碼格式的文件。
???????到此其實可以說,解決方案基本上已經ok了,但是近來因為暑假癱在家,經常刷電影,就發現呀,有時候字幕下載下來,尤其是那種壓縮包的字幕解壓后是一個文件夾,可氣的是一個文件夾的字幕都是亂碼的,這樣一個文件一個文件地去轉碼,煩都煩死了。作為一個不太稱職的碼農,我也是有想要化繁為簡的沖動的,于是自己從網上扒了些bash腳本的編寫教程,東拼西湊,整了個批量轉換一個文件夾內的亂碼文件的腳本,腳本代碼量比較少,就在此附上了:
#!/bin/bash # batch conv "gb18030"-typed file to "utf-8"-typed filepath=$1 # avoid filename having spaces files=$(ls $path | tr " " "\?") for filename in $files dofile=${path}"/"${filename}# split string by '.'OLD_IFS="$IFS"IFS="."array=($filename)IFS="$OLD_IFS"array_length=${#array[@]}if [ $array_length -le 1 ]thenecho "Fault file"continuefi# obtain all substring before the last '.'part1=""for (( i=0; i<$((array_length-1)); i++ ))do part1=$part1${array[$i]}"."donepart1=${part1%?} # delete the last character '.'# group new filenamefilename_new=${path}"/"$part1"-new."${array[array_length - 1]}echo $filename_newsudo iconv -f "gb18030" -t "utf-8" $file > $filename_new done執行時,只需執行
bash xxxx.sh dir_path # xxx.sh是腳本名稱,dir_path是文件夾的路徑即可。
總結
以上是生活随笔為你收集整理的Linux系统下文件字体乱码的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CelebA数据集在Linux下解压
- 下一篇: 编写python脚本完成图片拼接