欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > linux >内容正文

linux

Linux系统下文件字体乱码的解决方案

发布时间:2025/3/21 linux 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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系统下文件字体乱码的解决方案的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。