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下解压
- 下一篇: Linux下百度网盘一直进入不了登陆界面