本文主要是介绍mysqldump 导出数据文件,是乱码,何解?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
mysqldump 导出一个 SQL 文件,用vim 打开中文显示是乱码,导出的时候设置的字符集是 utf8 ,数据库的默认字符集也是utf8,终端操作同样是utf8的,用file 工具显示也是UTF8的文本文件,可用vim 打开就显示中文乱码.在打开的文件当中 set fileencoding 查看编码,居然是 latin1 编码的 用head,more,cat等文本查看工具,都正常显示中文无乱码. 思思不得其解. 后来偶尔看到网上文章说也许是编辑器本身的问题,于是搜索了一把.
原来是跟 vim 的设置有关. 请看下面一段话.
vim编码方面的基础知识:
1,存在3个变量:
encoding—-该选项使用于缓冲的文本(你正在编辑的文件),寄存器,Vim 脚本文件等等。你可以把 ‘encoding’ 选项当作是对 Vim 内部运行机制的设定。
fileencoding—-该选项是vim写入文件时采用的编码类型。
termencoding—-该选项代表输出到客户终端(Term)采用的编码类型。
2,此3个变量的默认值:
encoding—-与系统当前locale相同,所以编辑文件的时候要考虑当前locale,否则要设置的东西就比较多了。
fileencoding—-vim打开文件时自动辨认其编码,fileencoding就为辨认的值。为空则保存文件时采用encoding的编码,如果没有修改encoding,那值就是系统当前locale了。
termencoding—-默认空值,也就是输出到终端不进行编码转换。
由此可见,编辑不同编码文件需要注意的地方不仅仅是这3个变量,还有系统当前locale和、文件本身编码以及自动编码识别、客户运行vim的终端所使用的编码类型3个关键点,这3个关键点影响着3个变量的设定。
如果有人问:为什么我用vim打开中文文档的时候出现乱码?
答案是不确定的,原因上面已经讲了,不搞清楚这3个关键点和这3个变量的设定值,出现乱码是正常的,倒是不出现乱码那反倒是凑巧的。
看到这个,应该是 自动编码识别错误了!! 所以,可以在vim的配置文件中进行修改.
vim /etc/vimrc 中第一行会设置编码.
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set fileencodings=ucs-bom,utf-8,latin1
endif
但是在文件编码识别成了 latin1 ,改为
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set fileencodings=utf-8
endif
就好了.
这篇关于mysqldump 导出数据文件,是乱码,何解?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!