当前位置:首页 » 网页前端 » shell脚本中iconv用法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

shell脚本中iconv用法

发布时间: 2022-05-21 13:37:10

A. linux shell 遍历文件夹 并将结果保存 到变量

#!/bin/bash
(($#<1))&&echo"paramiszero!"&&exit1
[!-d$1]&&echo"$1notpath"&&exit1
dir=$1
dir_p="$dirDirectory:"
cd$dir
dir=`pwd`
foriin`ls$dir`
do
if[-d$i];then
/tmp/sh/dir_file$i#我的脚本文件在/tmp/sh中,需要改一下这里
else
dir_p="$dir_pFile$i"
fi
done
cd..
echo$dir_p


实验结果:

[root@localhost sh]# ./dir_file /tmp/python/

python_2 Directory : File 1.log File 2.log

python_3 Directory : File 3.log

/tmp/python/ Directory : File p File t.py File y.py


这样应该可以吧,试试看

B. 如何在Linux系统实现字符编码转换

Linux下提供了iconv实现这一功能,在Linux 的 shell 环境下,iconv用法如下:
iconv -f fromconde -t tocode
-f: 指定需要转换的文本编码
-t: 指定目标文本编码

我们也可以用 -l 列举出所有已知的字符编码集合

iconv -l

具体用法可以通过帮助函数 iconv --help来详细了解

另外,我们也可以在程序中直接使用该函数实现文本的编码转换

#ifndef __CODE_CONVERTER
#define __CODE_CONVERTER
#ifdef WIN32
#include <windows.h>
#else
#include <iconv.h>
#endif
class CodeConverter
{
private:
#ifndef WIN32
iconv_t m_cd;
#endif
const char* m_pszFromCode;
const char* m_pszToCode;
public:
CodeConverter()
{
m_pszFromCode = NULL;
m_pszToCode = NULL;
#ifndef WIN32
m_cd = 0;
#endif
}
~CodeConverter()
{
#ifndef WIN32
iconv_close(m_cd);
#endif
}
bool Initialize(const char *pszToCode, const char *pszFromCode);
size_t Convert(char* inBuf, size_t inBytesLeft, char* outBuf, size_t outBytesLen);
};
#endif

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "code_converter.h"
#include <errno.h>
bool CodeConverter::Initialize(const char* pszToCode, const char* pszFromCode)
{
if(pszFromCode == NULL || pszToCode == NULL) return false;
m_pszFromCode = pszFromCode;
m_pszToCode = pszToCode;
#ifndef WIN32
m_cd = iconv_open(m_pszToCode,m_pszFromCode);
if(m_cd == (iconv_t)-1)
{
printf("cannot open iconv descripter\n");
return false;
}
#endif
return true;
}
size_t CodeConverter:: Convert(char* inBuf, size_t inBytesLeft, char* outBuf, size_t outBytesLen)
{
int nRealLen = 0;
#ifdef WIN32
if(stricmp(m_pszFromCode,"UNICODE") == 0)
{
nRealLen = WideCharToMultiByte(CP_ACP,0,(PWCHAR)inBuf, inBytesLeft, (PCHAR)outBuf, outBytesLen,NULL,NULL);
}
if(stricmp(m_pszFromCode,"gb2312") == 0)
{
nRealLen = MultiByteToWideChar(CP_ACP,0,(PCHAR)inBuf,inBytesLeft,(PWCHAR)outBuf, outBytesLen);
}
#else
size_t outBytesLeft = outBytesLen;
size_t ret = 0;
while (1)
{
ret = iconv(m_cd, &inBuf, &inBytesLeft, &outBuf, &outBytesLeft);
if (ret == 0) break;
if (ret == (size_t)-1)
{
printf("iconv error aaa: %s\n",strerror(errno));
return -1;
}
inBuf++; inBytesLeft--;
}
nRealLen = outBytesLen-outBytesLeft;
outBuf[nRealLen]=0;
#endif
return nRealLen;
}

C. iconv."$data1">"$dataf1"这里两个变量,如果在shell里面执行没问题,可是写到sh语句里面执行就有问题了

那两个变量应该是两个文件名吧?

你按这个试试呢

D. shell哪个命令可以将uicode编码转换成中文

使用iconv命令即可,大多数Linux发布版都自带:
先把包含编码“\u82f9\u679c”的文件保存为这个名字:pingguo_UTF16.txt
然后执行下面命令:

iconv -f UTF16 -t UTF8 pingguo_UTF16.txt > pingguo_UTF8.txt
iconv -f UTF16 -t GB18030 pingguo_UTF16.txt > pingguo_GB18030.txt
用文本编辑器打开查看这两个(pingguo_UTF8.txt / pingguo_GB18030.txt)新文件即可。

E. 【求助】请问为什么要学习linux下的shell编程

不能拿学习其它编程语言的概念来学习shell,学习shell,主要就是学会linux下各种工具的使用,然后用shell语言把他们联合起来达到一定的目的,拿身边真实的例子说说 1 用excel软件先把数据转换成csv文件,比如用空格隔开每一行的数据 2 使用iconv把文件转为utf8编码 3 使用awk把文件内容转为sql的insert语句 4 然后传入mysql程序插入数据 所有步骤可以写成一个简单的shell语句,形式上如下: cat somedata.csv | iconv -to utf8 | gawk '{print ......}' | mysql -uroot -pxxxxx 这样做的好处是: 1 可以用现成的软件组合出你需要的功能,而不是一个特定的软件,比如这里的iconv和awk 2 这些软件学一次就可以用一辈子,可以用于各种不同的场合,达到所想即所得 3 开发成本低,还可以写成一个脚本,然后用corntab定时调用 更多的交流可以给我发邮件: [email protected]

F. 怎么用SHELL命令转换语言编码格式

是转换文本文件的编码格式么,用iconv:

ICONV(1) Linux User Manual ICONV(1)

NAME
iconv - convert text from one character encoding to another

SYNOPSIS
iconv [options] [-f from-encoding] [-t to-encoding] [inputfile]...

G. linux 怎么修改shell的字符属性

查看文件编码file命令

file ip.txt

查看文件编码file命令

file ip.txt

ip.txt: UTF-8 Unicode text, with escape sequences

一、利用iconv命令进行编码转换文件内容编码转换

iconv命令用于转换指定文件的编码,默认输出到标准输出设备,亦可指定输出文件.

用法: iconv [选项...] [文件...]

有如下选项可用:

输入/输出格式规范:

-f, --from-code=名称 原始文本编码

-t, --to-code=名称 输出编码

信息:

-l, --list 列举所有已知的字符集

输出控制:

-c 从输出中忽略无效的字符

-o, --output=FILE 输出文件

-s, --silent 关闭警告

--verbose 打印进度信息

-?, --help 给出该系统求助列表

--usage 给出简要的用法信息

-V, --version 打印程序版本号

例子:

iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt

这个命令读取aaa.txt文件,从utf-8编码转换为gb2312编码,其输出定向到bbb.txt文件.

你可照着上面的命令格式,改改试试。

H. xshell帮助命令注释无法更改为中文注释

一、在Windows里用文本编辑器将该文件另存为同名文件,在编码栏选择utf-8,这样保存之后,在Linux里便不会乱码了。
二、使用iconv命令转码
命令格式:$ iconv -f gb18030 -t utf-8 -o {目标文件} {源文件}

I. shell脚本怎么修改编码

首先,我得知道这个文件具体采用的是什么样的编码,如果是ISO-8859我将会把它转成UTF-8,其他的ASCII这些都先不做处理,这里可以使用file filename或者是enca iconv

enca需要获取下:sudo apt-get install enca

iconv的一般用法是:(可以man iconv)

-f from code 源文件编码

-t to code 目标文件编码

-o output file 保存为文件

例子:

iconv -f GB2312 -t UTF-8 -o google.txt google.txt

将google.txt的编码由GB2312更新为UTF-8

enca也同上用法,一般在脚本中对于未曾提供的语言,enca不会报错,这样可以保证脚本顺利执行

enca -L zh_CN file 检查文件编码

enca -L zh_CN -x UTF-8 file 将文件编码修改为UTF-8并覆盖文件

具体的用法都可以去查看man手册或者google之

好了,不多说,查看脚本吧!

#!/bin/bash -x

#由于之前使用windows系统来存放过一些文本文件,利用dropbox同步过来的时候,文件发生乱码,故写脚本来批量处理

#这里是对所有的需求文件进行处理,后续可根据修改目录进行处理

SUBFIX="txt html htm conf"

#cd /home/gavin/tmp

if [ -z $1 ];then
cd $PWD
else
if [ -d $1 ];then
cd $1
else
echo " $1 is not exist;"
exit 1
fi
fi

for i in $SUBFIX;
do
files=`find . -name "*.$i"`
for f in $files;
do
type=`file $f|awk -F':' '{print $2}' |awk '{print $1}'` #获取文件类型
if [ $type = "ISO-8859" ];then
#iconv -f GB2312 -t UTF-8 -o $f $f
enca -L zh_cn -x UTF-8 $f
else
echo "$f encoding is :$type"
fi

done
done

J. 怎样在Shell中把utf8编码转成中文显示

可以使用编码转换工具iconv iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件。它的作用是在多种国际编码格式之间进行文本内码的转换。