博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初学shell,今天遇到由wget下载到本地的网页源代码的乱码问题,无聊的写了一个转码的脚本...
阅读量:5892 次
发布时间:2019-06-19

本文共 1403 字,大约阅读时间需要 4 分钟。

今天用wget想下载文件,结果下载了一堆本地的index.html文件,一查看全是乱码,然后百度了一下,网页的编码格式大概有三种:

1、utf-8

2、gb2312

3、gbk

要在网页源码中的<head>下的<meta >属性的设置中查看 charset  对应的属性值。

而我的centos的操作系统只识别utf-8格式的,由环境变量LANG保存的配置,我们可以查看一下 echo $LANG  ,系统返回的是:zh_CN.UTF-8 。所以我们需要一个转换编码格式的命令:iconv,它用于把给定的文件内容从一种编码转换成另一种编码。常用的命令就是:

              iconv   -f    [gb2312/gbk]    -t   [utf-8]   [inputfile]

如果想要知道系统下支持的所有的编码格式,可以用命令    

              iconv  -l   (列出已知的编码字符集合)来查看。  

当然,我们也可以暂时的改变环境变量LANG的值为我们本地的index.html中“charset”的编码格式。

下面是转码的脚本

#!/bin/bash

cat <<NOTE

 该脚本用于解决wget下载到本地的index.html文件的乱码问题,如果是utf-8格式的,则不作调整,如果不是utf-8格式的,将会转换为utf-8的格式,并重定向输出到同名文件下的子文件。
webber
NOTE
usage() 
  #显示脚本的使用方法
 echo "Usage: Please tell me the correct file name!"
 exit 35 
}
if [ ! -f "$1" ];then
   echo "$1: No such file"
   usage
fi
Language=`cat $1 | grep "charset" | sed "s/^.*charset=//" | awk -F'\"' '{print $1}' | sed -n "1p"` #查看charset使用的是哪种3编码格式  大多数网站都可以抓取出来
# Language2=`cat jingdong.html | grep "charset" | sed "s/^.*charset=\"//" | awk -F'\"' '{print $1}' | sed -n "1p"` 京东网站抓不出来,在用sed替换时需要一个"来改变替换的格式
case "$Language" in   #进行格式转换 并且输出到文件
 utf-8)
    echo "correct!! It's utf-8 code. "
    ;;
 [gG][bB]2312)
   cat $1 | iconv -f gb2312 -t utf-8 > $1.1 2> /dev/null
   echo "finished! please cat the file $1.1!!"
   ;;
 [gG][bB][kK])
   cat $1 | iconv -f gbk -t utf-8 > $1.1 2> /dev/null
   echo "finished! please cat the file $1.1!!"
   ;;
 *)
   echo "I don't know the uni-code"
   ;;
esac
exit 0

转载于:https://www.cnblogs.com/webber1992/p/5850773.html

你可能感兴趣的文章
python入门小游戏代码_【Python】Python代码实现“FlappyBird”小游戏
查看>>
pytorch增加一维_pytorch 数据维度变换
查看>>
ie includes语法报错_HTML5基础:JS有哪些变态语法
查看>>
php的mysql的分区_详细介绍mysql中的分区
查看>>
云服务器怎么卸载mysql数据库_mysql 删除数据库脚本
查看>>
mysql 5.5.57互为主从_MYSQL 5.5.18 互为主从配置成功
查看>>
mysql5002_mysql新手进阶02
查看>>
python类 del_全面了解Python类的内置方法
查看>>
前后端传图片用base64好吗_前后端分离 前台传base64的图片 tp5.1.1进行处理
查看>>
java对象的排序_Java对象排序两种方法
查看>>
java jni 原理_使用JNI技术实现Java和C++的交互
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
java 生成对称密钥_java中以DES的方式实现对称加密并提供密钥的实例
查看>>
java hostwrite_一个RUNNABLE状态的线程hang在了java.io.FileOutputStream.writeBytes方法上
查看>>
计算机java语言答案_【计算机考试】JAVA语言,求答案!!!
查看>>
java web session管理_Java Web之会话管理二:Session
查看>>
java 面向对象基本概念_Java面向对象-面向对象编程之基本概念
查看>>
java数值保留2位小数_java中如何使Double类型的数值保留两位小数问题
查看>>
java基础包括哪些内容_Java基础课程内容有哪些?
查看>>
java跨行_小白跨行学习Java的辛酸路程
查看>>