在以前的时候,终端编码通通设置的都是UTF-8,即使有一两台远程机,因为有自主权也都是UTF-8编码,包括数据库表格,也都是统一UTF-8编码,不得不说这样统一以后非常方便,几乎也没有考虑过编码不同带来的烦恼。

来到公司工作一段时间后才发现,自己的开发机还好说,设置成UTF-8就可以了,保持原有惯例。然而,需要经常登录别的机器看任务跑代码就会发现乱码了,好吧,手动把终端(iTerm2)调到GBK,结束以后再调回来;然后过了没两天,会发现其他机器的Mysql表格也是GBK的,好吧还得暂调GBK。最大的问题还不在于麻烦,我一个终端下连接了多台服务器和数据库,编码都不统一,这可怎么办?

在网上找到了两种方案,第一种是基于iTerm2的,可以参考Mac OSX iTerm2 终端UTF-8和GBK编码自由切换,虽然我是iTerm2的用户,但是觉得这种方法还是有些麻烦,如果我不用iTerm2还不能解决了?

当然还有其他利器,那就是luit.

参考IBM Knowledge Center上的介绍luit 命令

luit 命令是一个过滤器,在任意应用程序和 UTF-8 终端仿真器之间运行。luit 命令将应用程序输出从语言环境的编码转换为 UTF-8,并将终端输入从 UTF-8 转换为语言环境的编码。

注:
多语言应用程序必须设置为仅生成 UTF-8 代码。不得使用命令生成 UTF-8 之外的输出。

luit的安装也非常简单,参考 Tmux、Luit 杂谈过程如下。

1
2
3
4
5
6
wget -c ftp://invisible-island.net/luit/luit.tar.gz
tar -xzvf luit.tar.gz
cd luit-20141204/
./configure
make
make install

其使用可以man一下,或者参考luit 命令,下面简单给出两个示例。

1
2
luit -encoding gbk ssh relay-mechine
# 这样登录远程机器用的就是GBK编码了
1
2
luit -encoding gbk mysql -u mysql_user -p 
#这样连接数据库用的也是GBK编码

最后不得不吐槽一下我司,是因为出于历史原因吗,固守GBK阵营?

参考

  1. luit 命令
  2. Tmux、Luit 杂谈
  3. Mac OSX iTerm2 终端UTF-8和GBK编码自由切换