Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux shell 执行报错 字符编码转换 iconv/dos2unix 将 gbk/gb2312 转utf8 解决方案

Linux shell 执行报错 字符编码转换 iconv/dos2unix 将 gbk/gb2312 转utf8 解决方案

原创
作者头像
eisc
修改于 2024-08-29 01:45:49
修改于 2024-08-29 01:45:49
1.6K0
举报
代码语言:shell
AI代码解释
复制
#!/bin/bash
# gb2312 转 utf8 编码
# 开发   : 小绿叶技术博客 eisc.cn
# date  :  2023.2.27



dir="./" ; echo "当前目录: $dir"
sudo chmod 777 -R $dir/*
# FileList=(`du -ah $dir | awk -F" " '{print $2}'`)
# find ./ -type f | xargs dos2unix
# 列出所有文件和目录
# xargs  作用是将管道前面的结果内容(查找所有内容为  f 文件 )  传递 给后面命令使用

echo "[runing] ISO-8859  Non-ISO  编码等于 GB2312 编码; 重点: ASCI 在 utf8 和 gbk 中都存在,因此不要将 ASCI 编码进行转换 utf8   " ; sleep 2;  

apt_install()
{
    linuxKernel=`cat /etc/os-release  | grep -w ID | awk -F"=" '{print $2}'`

    case "$linuxKernel" in 
        "ubuntu") sudo apt install -y dos2unix  ; echo "[ok] 当前系统为: $linuxKernel  是 ubuntu..."  ;;
        "debian") sudo apt install -y dos2unix  ; echo "[ok] 当前系统为: $linuxKernel  是 debian..."  ;;
        "centos") sudo yum install -y dos2unix  ; echo "[ok] 当前系统为: $linuxKernel  是 centos..."  ;;
        "redhat") sudo yum install -y dos2unix  ; echo "[ok] 当前系统为: $linuxKernel  是 redhat..."  ;;
        *)            echo "未匹配到系统,你可以更换系统后再试试, 建议系统: ubuntu20  debian  centos redhat" ;;
    esac

    sleep 1
}

run_file()
{
        destBM="UTF-8"
        # 定义转为 目标编码. 可以互相转换

        fileTypeUtf8=`file $file | grep $destBM`
        fileTypeUtf8Length=${#fileTypeUtf8} 

        case "$bm" in 
            "ISO-8859") bm="GB2312" ;;
            "Non-ISO")  bm="GB2312" ;;
        esac

        if [ "$fileTypeUtf8Length" -lt "1" ]
        then 
            echo "------->  [set] 编码 $bm 转为 $destBM  $file  文件类类型: $fileType"
            sudo iconv -c -f $bm -t $destBM $file -o $file.zhuanhuan
            sudo mv $file.zhuanhuan $file
        else
            echo "[ok] 该文件:$file 已经是  $destBM 编码"
        fi
}

Character_encoding()
{

    for((i=0;i<${#FileList[*]};i++))
    do
        file=${FileList[$i]}
        fileType=`file $file ` 
        
        bmFileBZ=0
        bmlist=( GB2312 ISO-8859 Non-ISO GBK UTF-8)
        # GB2312 ISO-8859 GBK 三种编码是同类,填写

        sudo dos2unix $file     # 非常重要:解决 windows 和 ubuntu下的 ^M 字符错误, shell 执行报错 ^M ; 这个符号是 windows 的换行符号

        for bm in ${bmlist[*]}
        do
            bmFile=`file $file | grep $bm` ; bmFileLength=${#bmFile} ; 
            if [ "$bmFileLength" -gt 0 ] 
            then 
                echo "[runing] 当前文件 $file 编码是 $bm 开始处理 " 
                bmFileBZ=1
                run_file 
            fi 
        done

#        if [ "$x"="0" ] && [ "$y" = "0" ]   多个条件判断
        if [ "$bmFileBZ" = "0" ]
        then
            echo "[warning] 文件编码标记(0/1 未匹配/匹配编码): $bmFileBZ 当前文件 $file 编码非 ( ${bmlist[*]} )  编码: `file $file | awk -F":" '{print $2}'`" 
                    
        fi

    done
}


list_file()
{
    szFile=( c h  txt bat sh py)

    for szf in ${szFile[*]}
    do
        echo "当前正在处理 $szf 文件" ; FileList=(`find $dir -name "*.$szf"`) ; Character_encoding ;
    done


}

main(){
    apt_install


    list_file

}
main

# iconv 编码转换脚本一键执行: wget eisc.cn/file/ubuntu/shell/tools/file/utf8.sh ; sudo chmod +x utf8.sh ; ./utf8.sh

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Redis最基础内容
String类型,也就是字符串类型,是Redis中最简单的存储类型。其value是字符串,不过根据字符串的格式不同,又可以分为3类:
ha_lydms
2023/08/10
2491
Redis最基础内容
深入Redis数据结构和底层原理
其中一个重要的原因,就是Redis中高效的数据结构,因此我们就专门的来研究下Redis的核心数据结构,Go!
闫同学
2022/10/31
3590
深入Redis数据结构和底层原理
Redis 数据类型
string是redis最基本的类型,一个key对应一个value string类型是二进制安全的,即它可以包含任何数据
全栈程序员站长
2022/07/25
3300
常用五大数据类型
命令大小写都可以,如果你只想单纯看 API,不想看例子,请移到最下面的 指令总结。
用户9615083
2022/12/25
8470
常用五大数据类型
redis缓存数据库
redis 介绍 redis是业界主流的key-value nosql 数据库之一。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是r
用户1679793
2018/07/05
4.5K0
Redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
子润先生
2021/07/05
5130
Redis 数据类型
Redis00--Redis的基本命令
Redis hash 是一个键值对集合,Redis hash是一个String类型的field和value的映射表,hash特别适合存储对象,例如SpringSession中的session信息,存储用户信息,用户主页访问量等等。
码农飞哥
2021/08/18
3590
Redis-1.Redis数据结构
自增自减命令 自增自减命令只能作用于整数,如果对不存在的键或者保存了空串的键执行自增/自减操作,那么会将这个键的值当作0处理,如果对无法解释为整数或者浮点数的字符串值性自增/自减操作,把额会返回一个错误。
悠扬前奏
2019/05/30
7110
Redis笔记(二):Redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
朝雨忆轻尘
2019/06/19
6240
Redis常用命令、5种数据类型的内部编码实现以及实用场景
相信绝大部分人,应该是99%的人都知道Redis的5种的基本类型、它们分别是:字符串、哈希、列表、集合、有序集合,就如同下图这样:
Java学习录
2019/05/06
5120
Redis常用命令、5种数据类型的内部编码实现以及实用场景
简简单单入个Redis的门
Redis是一种key-value的存储系统,它是一种nosql(Not Only [SQL])非关系型的数据库,它支持string(字符串)、list(链表)、set(集合)、hash(哈希类型)和zset(sorted set --有序集合)数据类型,这些数据类型有着丰富的操作,且均具有原子性。
code随笔
2020/11/06
3770
Redis 简介
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 开发的 key-value 存储系统。
acc8226
2022/05/17
3380
Redis 简介
Redis常用命令
推荐这个可视化工具,GitHub地址:https://github.com/qishibo/AnotherRedisDesktopManager/
乐心湖
2021/01/18
8510
Redis常用命令
一文读懂Redis数据类型
也就是说redis的存储类型 key(string) -- value(string、hash、list、set、zet)
Devops海洋的渔夫
2022/01/17
4290
一文读懂Redis数据类型
Redis相关命令
什么是Redis   Redis首先是一个存储数据库,数据在缓存在内存中,数据是K-V结构。 Redis的使用 Redis安装使用 Redis的数据类型 类型 描述 备注 string 字符串 K-V 最大值存储512M list 简单字符串列表,可以将元素添加最左边或者右边 最多存储232 - 1 set string类型的无序集合 Hash表实现,查询效率O(1),最多存储232 - 1 zset 有序集合,成员不能重复,但是scope可以重复 image.png hash 键值对的集合 image.p
OPice
2020/01/15
8040
redis基础指令及数据类型
全局指令 redis有5种数据类型,它们是键值对中的值,对于键来说有些通用的命令。这里称之为全局指令。 set 创建一个键值对
小手冰凉
2020/07/14
3650
Redis基础知识(一)
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map),列表(list),集合(sets)和 有序集合(sorted sets)等类型。
没有故事的陈师傅
2019/12/11
1.4K0
Redis 常用操作命令,非常详细!
nx:如果key不存在则建立,xx:如果key存在则修改其值,也可以直接使用setnx/setex命令。
Java技术栈
2018/11/30
3K0
Redis(2):常用命令详解
redis命令不区分大小写 通用命令: 1. 获得符合规则的键名列表: keys pattern    其中pattern符合glob风格  ? (一个字符) * (任意个字符) [] (匹配其中的
SecondWorld
2018/03/14
1.1K0
Redis基础(超详解)一 :Redis定义、SQL与NoSQL区别、Redis常用命令、Redi五种数据类型String、List、Set、Hash、ZSet
Redis诞生于2009年,全称是Remote Dictionary Server,远程词典服务器,是一个开源、基于内存的键值型NoSQL数据库。
寻求出路的程序媛
2024/07/03
9610
Redis基础(超详解)一 :Redis定义、SQL与NoSQL区别、Redis常用命令、Redi五种数据类型String、List、Set、Hash、ZSet
相关推荐
Redis最基础内容
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档