linux 字符编码?修改linux字符集为gbk

很多朋友对于linux 字符编码和修改linux字符集为gbk不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

如何在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;

}

linux怎么看文件的字符集编码

Linux下查看文件字符编码和转换编码如果你需要在 Linux中操作 windows下的文件,那么你可能会经常遇到文件编码转换的问题。 Windows中默认的文件格式是 GBK(gb2312),而 Linux一般都是 UTF-8。下面介绍一下,在 Linux中如何查看文件的编码及如何进行对文件进行编码转换。

一,查看文件编码:在 Linux中查看文件编码可以通过以下几种方式:

1.在 Vim中可以直接查看文件编码:set fileencoding即可显示文件编码格式。如果你只是想查看其它编码格式的文件或者想解决用 Vim查看文件乱码的问题,那么你可以在~/.vimrc文件中添加以下内容: set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936这样,就可以让 vim自动识别文件编码(可以自动识别 UTF-8或者 GBK编码的文件),其实就是依照 fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用 latin-1(ASCII)编码打开。

2. enca(如果你的系统中没有安装这个命令,可以用 sudo yum install-y enca安装)查看文件编码$ enca filename filename: Universal transformation format 8 bits; UTF-8 CRLF line terminators需要说明一点的是,enca对某些 GBK编码的文件识别的不是很好,识别时会出现: Unrecognized encoding

二,文件编码转换

1.在 Vim中直接进行转换文件编码,比如将一个文件转换成 utf-8格式:set fileencoding=utf-8

2. iconv转换,iconv的命令格式如下:输入/输出格式规范:-f,--from-code=名称原始文本编码-t,--to-code=名称输出编码信息: www.Svn8.Com-l,--list列举所有已知的字符集输出控制:-c从输出中忽略无效的字符-o,--output=FILE输出文件 Svn8.Com-s,--s ilent关闭警告--verbose打印进度信息-?,--help给出该系统求助列表--usage给出简要的用法信息-V,--version打印程序版本号例子: iconv-f utf-8-t gb2312 aaa.txt>bbb.txt这个命令读取 aaa.txt文件,从 utf-8编码转换为 gb2312编码,其输出定向到 bbb.txt文件。 iconv-f encoding-t encoding inputfile比如将一个 UTF-8编码的文件转换成 GBK编码 iconv-f GBK-t UTF-8 file1-o file2

3. enconv转换文件编码比如要将一个 GBK编码的文件转换成 UTF-8编码,操作如下 enconv-L zh_CN-x UTF-8 filename

如何在Linux中将文件编码转换为UTF-8

字符编码方案有很多种,比如 ASCII、ANCI、Unicode等等。下面是 ASCII编码的一个例子。

字符二进制

A 01000001

B 01000010

在 Linux中,命令行工具 iconv用来将使用一种编码的文本转化为另一种编码。

你可以使用 file命令,并添加-i或--mime参数来查看一个文件的字符编码,这个参数可以让程序像下面的例子一样输出字符串的 mime(Multipurpose Internet Mail Extensions)数据:

$ file-i Car.java

$ file-i CarDriver.java

阅读剩余
THE END