Windows下利用Gvim写PHP产生中文乱码问题解决方法
程序员文章站
2022-05-25 21:18:57
首先:找出乱码产生的原因。 一直以为是浏览器的原因,结果我在chrome,firefox,ie9里面都出现了乱码,所以浏览器的因素可以排除。为了验证我猜测是gvim的原因,...
首先:找出乱码产生的原因。 一直以为是浏览器的原因,结果我在chrome,firefox,ie9里面都出现了乱码,所以浏览器的因素可以排除。为了验证我猜测是gvim的原因,
我用记事本(note)简单写了一个php文件
<?php
echo "你好";
echo "世界";
?>
结果没有出现乱码,所以问题就出在gvim上,这个结论水到渠成。
于是,开始研究gvim的配置文件(_vimrc), 现在给大家看一下我产生乱码之前的配置(注:我之前修改过):
set nocompatible
source $vimruntime/vimrc_example.vim
source $vimruntime/mswin.vim
behave mswin
set diffexpr=mydiff()
function mydiff()
let opt = '-a --binary '
if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
let arg1 = v:fname_in
if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
let arg2 = v:fname_new
if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
let arg3 = v:fname_out
if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
let eq = ''
if $vimruntime =~ ' '
if &sh =~ '\<cmd'
let cmd = '""' . $vimruntime . '\diff"'
let eq = '"'
else
let cmd = substitute($vimruntime, ' ', '" ', '') . '\diff"'
endif
else
let cmd = $vimruntime . '\diff'
endif
silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction
"设置默认背景色
colors desert
"设置不自动备份
set nobackup
"设置默认字体和大小
set guifont=courier_new:h12:cansi
set termencoding=gbk
set encoding=utf-8
"产生问题的原因
set fileencoding=chinese
set fileencodings=ucs-bom,utf-8,chinese
set langmenu=zh_cn.utf-8
source $vimruntime/delmenu.vim
source $vimruntime/menu.vim
language messages zh_cn.utf-8
language messages zh_cn.utf-8
syntax enable
syntax on
这里需要说明一下:配置文件里enconding,fileeconding,fileecondings的含义:
encoding: gvim 内部使用的字符编码方式,包括 vim 的 buffer (缓冲区)、菜单文本、消息文本等。
用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在 .vimrc 中改变它的值才有意义。
fileencoding: gvim 中当前编辑的文件的字符编码方式,vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
fileencodings: gvim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。
因此最好将 unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
其中:chinese 就是 cp963编码
只到这里我突然想起来,我的浏览里默认的字符集是 gbk的,而_vimrc里的设置编码是utf-8的,二者不对应,
colors desert
set nobackup
set guifont=courier_new:h12:cansi
"处理文本中显示乱码
set encoding=utf-8
set fileencodings=chinese
set fileencoding=chinese
"处理菜单及右键菜单乱码
source $vimruntime/delmenu.vim
source $vimruntime/menu.vim
"处理consle输出乱码
language messages zh_cn.utf-8
syntax enable
syntax on
修改完成之后,重新启动gvim,中文乱码问题解决了。
我用记事本(note)简单写了一个php文件
复制代码 代码如下:
<?php
echo "你好";
echo "世界";
?>
结果没有出现乱码,所以问题就出在gvim上,这个结论水到渠成。
于是,开始研究gvim的配置文件(_vimrc), 现在给大家看一下我产生乱码之前的配置(注:我之前修改过):
复制代码 代码如下:
set nocompatible
source $vimruntime/vimrc_example.vim
source $vimruntime/mswin.vim
behave mswin
set diffexpr=mydiff()
function mydiff()
let opt = '-a --binary '
if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
let arg1 = v:fname_in
if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
let arg2 = v:fname_new
if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
let arg3 = v:fname_out
if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
let eq = ''
if $vimruntime =~ ' '
if &sh =~ '\<cmd'
let cmd = '""' . $vimruntime . '\diff"'
let eq = '"'
else
let cmd = substitute($vimruntime, ' ', '" ', '') . '\diff"'
endif
else
let cmd = $vimruntime . '\diff'
endif
silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction
"设置默认背景色
colors desert
"设置不自动备份
set nobackup
"设置默认字体和大小
set guifont=courier_new:h12:cansi
set termencoding=gbk
set encoding=utf-8
"产生问题的原因
set fileencoding=chinese
set fileencodings=ucs-bom,utf-8,chinese
set langmenu=zh_cn.utf-8
source $vimruntime/delmenu.vim
source $vimruntime/menu.vim
language messages zh_cn.utf-8
language messages zh_cn.utf-8
syntax enable
syntax on
这里需要说明一下:配置文件里enconding,fileeconding,fileecondings的含义:
encoding: gvim 内部使用的字符编码方式,包括 vim 的 buffer (缓冲区)、菜单文本、消息文本等。
用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在 .vimrc 中改变它的值才有意义。
fileencoding: gvim 中当前编辑的文件的字符编码方式,vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
fileencodings: gvim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。
因此最好将 unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
其中:chinese 就是 cp963编码
只到这里我突然想起来,我的浏览里默认的字符集是 gbk的,而_vimrc里的设置编码是utf-8的,二者不对应,
复制代码 代码如下:
colors desert
set nobackup
set guifont=courier_new:h12:cansi
"处理文本中显示乱码
set encoding=utf-8
set fileencodings=chinese
set fileencoding=chinese
"处理菜单及右键菜单乱码
source $vimruntime/delmenu.vim
source $vimruntime/menu.vim
"处理consle输出乱码
language messages zh_cn.utf-8
syntax enable
syntax on
修改完成之后,重新启动gvim,中文乱码问题解决了。
上一篇: 八皇后问题-递归回溯