十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在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. enconv 转换文件编码,比如要将一个GBK编码的文件转换成UTF-8编码,操作如下
enconv -L zh_CN -x UTF-8 filename
3. iconv 转换,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如将一个UTF-8 编码的文件转换成GBK编码
iconv -f GBK -t UTF-8 file1 -o file2
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=名称 输出编码 信息: -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下提供了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;
}
可直接进入 mysql 进行更改,具体如下:
1.查找/etc目录下是否有my.cnf文件;
#ls -l | grep my.cnf (在/etc下查找是否有my.cnf文件存在)
2.如果没有就要从/usr/share/mysql,拷贝一个到/etc 下,在/usr/share/mysql目录下有五个后缀为.cnf的文件,分别是 my-huge.cnf my-innodb-heavy-4G.cnf my-large.cnf my-medium.cnf my-small.cnf ;从中随便拷贝一个到/etc目录下并将其改为my.cnf文件,我选择的是my-medium.cnf :
#cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
3.修改my.cnf文件,在该文件中的三个地方加上 default-character-set=utf8([client] [mysqld] [mysql])
#vi /etc/my.cnf
修改如下:(红色为添加部分)
[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
default-character-set=utf8
init_connect='SET NAMES utf8' //此行可不加
[mysql]
no-auto-rehash
default-character-set=utf8
保存退出;
4.重起MySQL服务器,使其设置的内容生效
#/etc/init.d/mysql restart
5. 重新登入mysql;
# mysql -u root - p
#(输入密码)
mysql show variables like 'character_set%' ;
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |(都生成了utf8,成功了 哈哈哈)
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql启动和停止 操作 :
可以通过 #/etc/init.d/mysql [start | stop | restart](实现启动,停止,重启)
也可以通过 #service mysql [start | stop | restart](实现启动,停止,重启)
*********************************
另外:如果在修改字符集前,尝试在数据库中插入中文,那么当修改了字符集后,在你所插入中文的数据库中(在别的数据库中可能没问题),
通过show variables like 'character_set%'查询的结果可如下:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
改变redhat的系统语言/字符集修改 /etc/sysconfig/i18n 文件,如
LANG="en_US",xwindow会显示英文界面,
LANG="zh_CN.GB18030",xwindow会显示中文界面。
还有一种方法
cp /etc/sysconfig/i18n $HOME/.i18n
修改 $HOME/.i18n 文件,如
LANG="en_US",xwindow会显示英文界面,
LANG="zh_CN.GB18030",xwindow会显示中文界面。
这样就可以改变个人的界面语言,而不影响别的用户
(Debian不支持GB18030(RH的zysong字库是有版权的)
现在好像没有Free的GBK和GB18030字库
vi .bashrc
export.GB2312
export LC_ALL=zh_CN.GB2312)