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