上一篇我们提到了OS和DB的一些中文乱码问题解决,本篇我们继续介绍下在OS上的文本文件中文乱码问题。

操作系统是Linux(OEL 8.10),所有文件是打了一个压缩包上传的,上传解压后发现其中的文本文件中文乱码。类似现象如下:

[oracle@dbtest AIDIR]$ cat yy.txt
ʵa) (b)֪
Ʒ
b)a)ʵ0;

这通常是文本文件的字符编码导致。

举个例子。

现在有两个文件:

  • xx.txt是我自己vi编辑新建的
  • yy.txt这里代表的是同事发我的一些测试文件
# 两个测试文本文件 xx.txt, yy.txt
[oracle@dbtest AIDIR]$ ls -l xx.txt
-rw-r--r-- 1 oracle oinstall 38 Mar 20 01:50 xx.txt
[oracle@dbtest AIDIR]$ ls -l yy.txt
-rw-r--r-- 1 oracle oinstall 291 Mar 20 01:50 yy.txt
# 使用file -i 文件名 查看其字符编码
[oracle@dbtest AIDIR]$ file -i xx.txt
xx.txt: text/plain; charset=utf-8
[oracle@dbtest AIDIR]$ file -i yy.txt
yy.txt: text/plain; charset=iso-8859-1

看到两个文件是charset=utf-8charset=iso-8859-1,但同事已经提前告诉我相关测试文件是GBK编码的,所以我不需要过多考虑。

至于为什么显示iso-8859-1,是因为 file 命令有时可能会错误识别 GBK 为 ISO-8859-1。

所以这里真实情况是,分别是UTF-8和GBK。

下面需要的就是如何转换编码,需要用到iconv这个命令:

iconv 是一个用于 字符编码转换 的命令,在 Unix/Linux 系统中常见,主要用于不同字符集(如 GBK、UTF-8、ISO-8859-1 等)之间的转换。

使用iconv 命令尝试转换yy.txt到yy1.txt:

iconv -f GBK -t UTF-8 yy.txt > yy1.txt

若文件中的中文字符显示正常,说明我们的推断正确。

但涉及的文件其实很多,那么我们需要批量处理下:

方案1:基于现有文件名,按规则生成新文件

保留现有文件,安全可控,新的文件是依据现有文件名,额外添加了_utf8标识。

for file in *.txt; do
iconv -f GBK -t UTF-8 "$file" -o "${file%.txt}_utf8.txt"
done

方案2:直接覆盖现有文件

文件名不变,适用于需要保持原文件路径的场景。

因为我的源文件是有备份的,所以可以采纳这种方法。

for file in *.txt; do
iconv -f GBK -t UTF-8 "$file" -o tmpfile && mv tmpfile "$file"
done

解决Linux下文本文件中文乱码问题的更多相关文章

  1. 解决Linux下Oracle中文乱码的一些心得体会 ,转自

    以下转自 http://blog.itpub.net/29151695/viewspace-1173238/ 最近在linux上安装完oracle 10gR2后,又遇到了字符集乱码的问题,之前在网上找 ...

  2. 解决Linux下sqlplus中文乱码问题

    错误现象:在windows下用其他工具访问oracle,确认中文正常显示.在Linux下使用sqlplus查询数据表中文内容出现乱码. 分析及解决:因为windows下正常,所以问题应出现在Linux ...

  3. 解决windows下vim中文乱码

    解决windows下vim中文乱码 windows安装了vim8,也就是gvim后,打开带有中文的文档,显示中文是乱码. 毕竟有许多文档我是用utf-8编码的,所以解决的办法是设置一下编码为utf-8 ...

  4. 解决linux下unzip中文有乱码的问题

    xxx.zip 中有中文的文件,在linux下unzip就会有乱码. 解决办法:安装7zip 去http://sourceforge.net/projects/p7zip/files/latest/d ...

  5. .net core在linux下图片中文乱码

    不得不吐槽一下,.net core 2.2的System.Drawing在linux有很多坑,又是依赖libgdiplus,又是依赖gdiplus,依赖解决了又来了个中文乱码,怎的一声哀叹 这里做个笔 ...

  6. 解决linux下导入数据库乱码问题

    引言:在windows下的mysql数据库导出SQL文件,在Linux下导入后显示为乱码. 1.启动Mysql服务及创建数据库(下面uushop为我将创建的数据库名) service mysqld s ...

  7. 解决Ubuntu下gedit中文乱码的情况

    windows下简体中文多用GBK编码 (或GB2312, GB18030), 而linux下多用UTF-8编码. 因此,一般来说在微软平台编辑的中文txt不能在ubuntu下直接打开查看,除非在保存 ...

  8. linux下python中文乱码解决方案

    1. 场景描述 linux服务器下安装了Anaconda3,执行Pyhton的K-means算法,结果出现如下图的中文字符乱码.上次已经解决了,忘记记录解决流程了,这次配置了一台新的服务器,又出现,默 ...

  9. 解决mac下sublime中文乱码

    Mac OS X 属于 Apple 独家演绎的 Unix 分支版本,默认使用 UTF-8 编码,当使用不同开发平台的小伙伴们,共同维护一份代码的时候,尤其现在很多人都还在用 Windows 系统的时候 ...

  10. linux下mysql中文乱码

    登录mysql执行mysql> show variables like 'character%';发现编码有些不是utf-8 修改/etc/mysql/my.cnf,网上说的是/etc/my.c ...

随机推荐

  1. 微信团队分享:来看看微信十年前的IM消息收发架构,你做到了吗

    本文由微信技术团队分享,原题"十年前的微信消息收发架构长啥样?",下文进行了排版和内容优化等. 1.引言 2023 年,微信及 WeChat 的 DAU(月活用户)达到 13.4 ...

  2. 刚学完Vue收集的库或项目分享

    最近刚看完一个Vue3的视频教程,还不错,整理最近收集与Vue相关的库或项目. awesome-vue:与 Vue.js 相关的精彩内容精选清单.https://github.com/vuejs/aw ...

  3. CDS标准视图:维护项目数据 C_MaintenanceItemDEX

    视图名称:维护项目数据 C_MaintenanceItemDEX 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'CMAINTITEMDEX' @Aba ...

  4. MAC安装redis的简单方法

    part 1:安装redis1.官网下载压缩包https://redis.io/download or brew install redis(太慢了-)我此处选的法一,先去官网上下载包,在解压使用. ...

  5. MQ的定时任务改装,实现自定义定时:MQ+redis

    package com.*.server.live.listener; import com.*.common.core.entity.constant.LiveConstant; import co ...

  6. Hyper-V创建虚拟机配置IP等网络配置原理(Linux、Windows为例)

    大家知道Windows系统里面内置了Hyper-V管理器,用来创建和管理本地虚拟机环境.今天我创建了两台虚拟机,一台是CentOS7.9(Linux),另一台是Windows 11,然后发现,Linu ...

  7. 关于toString()的小细节

    3. toString()方法3.1 toString()的使用: 1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString() * * 2. Object类中toString()的 ...

  8. ctfshow--web3 incluede伪协议注入

    这题一看就知道是个伪协议的题 直接用data伪协议 ls 查看目录 data://text/plainy, 再cat 一下就拿到flag了

  9. 一种基于alpine、支持ARM架构64位的镜像构建方法及其构建系统

    本文分享自天翼云开发者社区<一种基于alpine.支持ARM架构64位的镜像构建方法及其构建系统>,作者:郑****团 一种基于alpine.支持ARM架构64位的镜像构建方法及其构建系统 ...

  10. [记录点滴] Spark迁移到Flink的几个点

    [记录点滴] Spark迁移到Flink的几个点 0x00 三个问题点 有三个Spark API需要找到对应的Flink API或者替代方法 reduceByKeyAndWindow 函数reduce ...