当前位置: 首页 > news >正文

【Linux/Windows】源文件乱码问题解决方法总结

  • 🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)
  • 🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd
  • 🌐系列专栏:Linux技术
  • 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 👉关注✨、点赞👍、收藏📂、评论。
  • 如需转载请参考转载须知!!

源文件乱码问题解决方法总结

    • 乱码问题的由来
    • 查看文件编码
      • Windows系统
      • Linux系统
    • 基本格式转换
      • windows系统
      • Linux系统
        • vim
        • iconv
        • enconv
        • enca
        • convmv
    • 批量转换
      • 获取某目录下文件所有编码方式
      • 利用vim批量转换
      • 利用iconv批量转
    • 推荐的vim配置
    • 小结

乱码问题的由来

  • Linux <—> Windows 之间相互需要修改文件,然后发现中文显示乱码。原因是Windows中默认的文件格式是 GBK(gb2312),而Linux一般都是UTF-8。

查看文件编码

Windows系统

  • 利用Notepad++、UE、VSCode之类都可以查看;

Linux系统

  • vim查看
:set fileencoding
  • file命令查看
file -i test.c
  • enca
enca -L zh_CN filename  #检查文件的编码

基本格式转换

windows系统

  • 利用Notepad++、UE、VSCode之类都可以进行转换;

Linux系统

vim

  • 直接在命令模式下修改即可:
 :set fileencoding=utf-8

iconv

  • 常见的几种命令格式:
iconv -f from-encoding -t to-encoding inputfile #将input文件转换输出到屏幕
iconv -f from-encoding -t to-encoding inputfile -o outputfile #将input文件转换后输出到outputfile
iconv -f from-encoding -t to-encoding inputfile > outputfile  #将input文件转换后重定向到outputfile

注意:这里输入文件和输出文件不能相同。

  • 两个例子:
# 对test.c转码:
iconv -f GB2312 -t UTF-8 test.c> test.c.tmp
cp test.c.tmp test.c
rm test.c.tmp#将google网页的Big5编码转换成GBK编码
curl -s http://www.google.com.hk/ | iconv -f big5 -t gbk  

enconv

enconv -L zh_CN -x UTF-8 filename  #将一个GBK编码的文件转换成UTF-8编码

enca

  • 傻瓜型命令行工具,不但能智能的识别文件的编码,而且还支持成批转换。
enca -L zh_CN -x utf-8 *      #要把当前目录下的所有文件都转成utf-8  

convmv

  • 仅适用于文件名的乱码:
sudo convmv -f gbk -t utf-8 -r –notest /home/qxhgd  #将/home/qxhgd目录下原来文件名是gbk编码方式的全部改为utf-8格式的

批量转换

  • 除enca天生支持批量转换外,其他的命令需要使用脚本,这里仅以Linux为例说明:

获取某目录下文件所有编码方式

find . -type f -exec file -i {} \; > /tmp/fileencoding.txt
grep "charset=utf-8" /tmp/fileencoding.txt

利用vim批量转换

  • gbk_to_utf8.sh
#!/bin/bash
for i in `find -name \*.[ch]`
dovim -s gbk_utf8.vi $i
done
  • gbk_utf8.vi
:set fileencoding=utf8
:wq!
  • 在某个目录下执行:
./gbk_to_utf8.sh

利用iconv批量转

  • 简化版:
find .  -name "*.c" -exec sh -c "iconv -f GB18030 -t UTF8 {} -o {}" \; 
  • 复杂版本:batch_iconv
  • 另一个例子:

iconv_shell.sh脚本如下:

#!/bin/bash
#iconv_shell.sh
if [ "$#" != "2" ]; then
echo "Usage: `basename $0` dir filter"
exit
fi
dir=$1
filter=$2
echo $1
for file in `find $dir -name "$2"`; do
echo "$file"
iconv -f gbk -t utf8 -o $file $file
done

使用方式:

cd ~/home/qxhgd/myprj
~/iconv_shell.sh ./*.c

推荐的vim配置

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set ts=4
set expandtab

小结

  • 对文件进行转码,注意备份源文件,否则容易毁天灭地,同时,转码完后一定要检查一下。

如本文对你有些许帮助,欢迎大佬加关注、评论、点赞,有关必回关

http://www.lryc.cn/news/15604.html

相关文章:

  • Python 四大主流 Web 编程框架
  • 学UI设计,可以向哪些方向发展?该怎么学?
  • 【C++】初识CC++内存管理
  • Nacos快速使用指南
  • 复旦发布国内首个类ChatGPT模型MOSS,和《流浪地球》有关?
  • 国家级高新区企业主要经济指标(2012-2021年)
  • SpringBoot2核心技术-核心功能【05、Web开发】
  • 2021-03 青少年软件编程(C语言)等级考试试卷(六级)解析
  • 数据库的多租户隔离
  • 网络输入分辨率是否越大越好
  • 离线采集普遍解决方案
  • SAP ABAP 数据类型P类型详解
  • 应用沙盒seccomp的使用
  • C++项目——高并发内存池(2)——thread_cache的基础功能实现
  • 【C进阶】数据的存储
  • 【已解决】异常断电文件损坏clickhouse启动不了:filesystem error Structure needs cleaning
  • FlinkSQL行级权限解决方案及源码
  • 【基础篇】8 # 递归:如何避免出现堆栈溢出呢?
  • 基于微信公众号(服务号)实现扫码自动登录系统功能
  • AXI实战(二)-跟着产品手册设计AXI-Lite外设(AXI-Lite转串口实现)
  • 一周搞定模拟电路视频教程,拒绝讲PPT,仿真软件配合教学,真正一周搞定
  • 高德地图获得角度
  • 【C++】-- C++11基础常用知识点(下)
  • 提到数字化,你想到哪些关键词
  • 【蓝桥杯集训·每日一题】AcWing 1249. 亲戚
  • iphone所有机型的屏幕尺寸
  • Windows10使用-处理IE自动跳转至Edge
  • linux input子系统,gpio-keys,gpio中断使用
  • 分析称勒索攻击在非洲、中东与中国增长最快
  • ArcPy批量合并矢量shape文件