编码

2018-09-04

解决ubuntu server在tty本地终端下中文乱码显示棱形

安装 fbterm

sudo apt-get install fbterm

设置普通用户可以执行 fbterm 命令

sudo adduser username video           #username为用户名,video为fbterm所在组
sudo chmod u+s /usr/bin/fbterm

设置纯文本终端自动执行 fbterm 命令 更改当前用户家目录下的 .bashrc 文件 在最后添加下面内容

alias fbterm='LANG=zh_CN.UTF-8 fbterm'
if [[ "$TERM" = linux ]] && [[ "$(ps otty= $$)" =~ tty ]] && type fbterm &>/dev/null; then
		fbterm
fi

给fbterm 用别名,为了启动是中文环境, 否则中文文件名字不能正确显示, 然后进行判断,如果是纯文本终端就执行 fbterm

修改配置文件 ~/.fbtermrc

font-names=DejaVu Sans Mono,WenQuanYi Zen Hei Sharp
font-size=16

查看linux系统本地化编码信息

locale

参数解释:

LC_COLLATE   确定文本排序顺序,
LC_CTYPE    确定字符分类,例如,此设置是tolower(3C)正常工作所必需的,
LC_MESSAGES 确定系统消息的语言(通常你不想改变它 - 阅读它们很重要即使您的环境以任何方式受到损害),
LC_MONETARY 确定货币符号和名称,
LC_NUMERIC  确定数字数据的表示(例如,使用“。”或“,”作为小数分隔符),
LC_TIME     确定日期和时间表示和设置(例如,一周的第一天),

查看系统已经安装的编码类型

locale -a

查看文件编码类型

file -i filename

或者使用enca

enca -L zh filename

编码转换

enca

# 将文件编码转换为”UTF-8″编码
enca -L zh_CN -x UTF-8 filename

# 如果不想覆盖原文件可以这样
enca -L zh_CN -x UTF-8 < filename > filename2

iconv

iconv -f gb2312 -t UTF-8 -o filename2 filename

# -f encoding :把字符从encoding编码开始转换。 
# -t encoding :把字符转换到encoding编码。 
# -l :列出已知的编码字符集合 
# -o file :指定输出文件 
# -c :忽略输出的非法字符 
# -s :禁止警告信息,但不是错误信息 
# --verbose :显示进度信息 
# -f和-t所能指定的合法字符在-l选项的命令里面都列出来了。 

convmv

convmv -f GBK -t UTF-8 -r --nosmart --notest <目标目录>

# -f from
# 
# -t to
# 
# --nosmart 如果已经是utf-8 忽略
# 
# -r 包含所有子目录
# 
# --notest 不加表示只列出有什么需要转换的,不做实际转换