Windows下利用Gvim寫PHP產(chǎn)生中文亂碼問題解決方法
更新時間:2011年04月20日 23:20:39 作者:
昨天本來說早點睡覺呢,沒想到一個在寫PHP程序的時候發(fā)現(xiàn)出現(xiàn)的亂碼問題又睡晚了,不過總算解決了。
首先:找出亂碼產(chǎn)生的原因。 一直以為是瀏覽器的原因,結(jié)果我在chrome,firefox,IE9里面都出現(xiàn)了亂碼,所以瀏覽器的因素可以排除。為了驗證我猜測是Gvim的原因,
我用記事本(note)簡單寫了一個php文件
<?php
echo "你好";
echo "世界";
?>
結(jié)果沒有出現(xiàn)亂碼,所以問題就出在Gvim上,這個結(jié)論水到渠成。
于是,開始研究Gvim的配置文件(_vimrc), 現(xiàn)在給大家看一下我產(chǎn)生亂碼之前的配置(注:我之前修改過):
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
"設(shè)置默認背景色
colors desert
"設(shè)置不自動備份
set nobackup
"設(shè)置默認字體和大小
set guifont=Courier_New:h12:cANSI
set termencoding=gbk
set encoding=utf-8
"產(chǎn)生問題的原因
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 內(nèi)部使用的字符編碼方式,包括 Vim 的 buffer (緩沖區(qū))、菜單文本、消息文本等。
用戶手冊上建議只在 .vimrc 中改變它的值,事實上似乎也只有在 .vimrc 中改變它的值才有意義。
fileencoding: GVim 中當(dāng)前編輯的文件的字符編碼方式,Vim 保存文件時也會將文件保存為這種字符編碼方式 (不管是否新文件都如此)。
fileencodings: GVim 啟動時會按照它所列出的字符編碼方式逐一探測即將打開的文件的字符編碼方式,并且將 fileencoding 設(shè)置為最終探測到的字符編碼方式。
因此最好將 Unicode 編碼方式放到這個列表的最前面,將拉丁語系編碼方式 latin1 放到最后面。
其中:chinese 就是 cp963編碼
只到這里我突然想起來,我的瀏覽里默認的字符集是 GBK的,而_vimrc里的設(shè)置編碼是utf-8的,二者不對應(yīng),
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文件
復(fù)制代碼 代碼如下:
<?php
echo "你好";
echo "世界";
?>
結(jié)果沒有出現(xiàn)亂碼,所以問題就出在Gvim上,這個結(jié)論水到渠成。
于是,開始研究Gvim的配置文件(_vimrc), 現(xiàn)在給大家看一下我產(chǎn)生亂碼之前的配置(注:我之前修改過):
復(fù)制代碼 代碼如下:
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
"設(shè)置默認背景色
colors desert
"設(shè)置不自動備份
set nobackup
"設(shè)置默認字體和大小
set guifont=Courier_New:h12:cANSI
set termencoding=gbk
set encoding=utf-8
"產(chǎn)生問題的原因
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 內(nèi)部使用的字符編碼方式,包括 Vim 的 buffer (緩沖區(qū))、菜單文本、消息文本等。
用戶手冊上建議只在 .vimrc 中改變它的值,事實上似乎也只有在 .vimrc 中改變它的值才有意義。
fileencoding: GVim 中當(dāng)前編輯的文件的字符編碼方式,Vim 保存文件時也會將文件保存為這種字符編碼方式 (不管是否新文件都如此)。
fileencodings: GVim 啟動時會按照它所列出的字符編碼方式逐一探測即將打開的文件的字符編碼方式,并且將 fileencoding 設(shè)置為最終探測到的字符編碼方式。
因此最好將 Unicode 編碼方式放到這個列表的最前面,將拉丁語系編碼方式 latin1 放到最后面。
其中:chinese 就是 cp963編碼
只到這里我突然想起來,我的瀏覽里默認的字符集是 GBK的,而_vimrc里的設(shè)置編碼是utf-8的,二者不對應(yīng),
復(fù)制代碼 代碼如下:
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,中文亂碼問題解決了。
相關(guān)文章
PHP Undefined index報錯的修復(fù)方法
用$_GET["xx"]這種形式取得數(shù)據(jù)時,如果之前不加判斷,$_GET["xx"]不存在時會出現(xiàn)這樣的警告:PHP Notice: undefined index xxx。2011-07-07php集成套件服務(wù)器xampp安裝使用教程(適合第一次玩PHP的新手)
這篇文章主要介紹了php集成套件服務(wù)器xampp安裝使用教程(適合第一次玩PHP的新手),本文也是學(xué)習(xí)PHP語言的第一個程序:helloworld,需要的朋友可以參考下2015-06-06php 遍歷顯示文件夾下所有目錄、所有文件的函數(shù),沒有分頁的代碼
一個簡單的目錄遞歸函數(shù) 第一種實現(xiàn)辦法:用dir返回對象 第二種實現(xiàn)辦法:用readdir()函數(shù)2008-11-11php Illegal string offset 'name&apo
這篇文章主要介紹了php Illegal string offset 'name'問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07php將HTML表格每行每列轉(zhuǎn)為數(shù)組實現(xiàn)采集表格數(shù)據(jù)的方法
這篇文章主要介紹了php將HTML表格每行每列轉(zhuǎn)為數(shù)組實現(xiàn)采集表格數(shù)據(jù)的方法,涉及php正則替換的技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04