Windows下利用Gvim寫(xiě)PHP產(chǎn)生中文亂碼問(wèn)題解決方法
更新時(shí)間:2011年04月20日 23:20:39 作者:
昨天本來(lái)說(shuō)早點(diǎn)睡覺(jué)呢,沒(méi)想到一個(gè)在寫(xiě)PHP程序的時(shí)候發(fā)現(xiàn)出現(xiàn)的亂碼問(wèn)題又睡晚了,不過(guò)總算解決了。
首先:找出亂碼產(chǎn)生的原因。 一直以為是瀏覽器的原因,結(jié)果我在chrome,firefox,IE9里面都出現(xiàn)了亂碼,所以瀏覽器的因素可以排除。為了驗(yàn)證我猜測(cè)是Gvim的原因,
我用記事本(note)簡(jiǎn)單寫(xiě)了一個(gè)php文件
<?php
echo "你好";
echo "世界";
?>
結(jié)果沒(méi)有出現(xiàn)亂碼,所以問(wèn)題就出在Gvim上,這個(gè)結(jié)論水到渠成。
于是,開(kāi)始研究Gvim的配置文件(_vimrc), 現(xiàn)在給大家看一下我產(chǎn)生亂碼之前的配置(注:我之前修改過(guò)):
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è)置默認(rèn)背景色
colors desert
"設(shè)置不自動(dòng)備份
set nobackup
"設(shè)置默認(rèn)字體和大小
set guifont=Courier_New:h12:cANSI
set termencoding=gbk
set encoding=utf-8
"產(chǎn)生問(wè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
這里需要說(shuō)明一下:配置文件里enconding,fileeconding,fileecondings的含義:
encoding: GVim 內(nèi)部使用的字符編碼方式,包括 Vim 的 buffer (緩沖區(qū))、菜單文本、消息文本等。
用戶(hù)手冊(cè)上建議只在 .vimrc 中改變它的值,事實(shí)上似乎也只有在 .vimrc 中改變它的值才有意義。
fileencoding: GVim 中當(dāng)前編輯的文件的字符編碼方式,Vim 保存文件時(shí)也會(huì)將文件保存為這種字符編碼方式 (不管是否新文件都如此)。
fileencodings: GVim 啟動(dòng)時(shí)會(huì)按照它所列出的字符編碼方式逐一探測(cè)即將打開(kāi)的文件的字符編碼方式,并且將 fileencoding 設(shè)置為最終探測(cè)到的字符編碼方式。
因此最好將 Unicode 編碼方式放到這個(gè)列表的最前面,將拉丁語(yǔ)系編碼方式 latin1 放到最后面。
其中:chinese 就是 cp963編碼
只到這里我突然想起來(lái),我的瀏覽里默認(rèn)的字符集是 GBK的,而_vimrc里的設(shè)置編碼是utf-8的,二者不對(duì)應(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
修改完成之后,重新啟動(dòng)Gvim,中文亂碼問(wèn)題解決了。
我用記事本(note)簡(jiǎn)單寫(xiě)了一個(gè)php文件
復(fù)制代碼 代碼如下:
<?php
echo "你好";
echo "世界";
?>
結(jié)果沒(méi)有出現(xiàn)亂碼,所以問(wèn)題就出在Gvim上,這個(gè)結(jié)論水到渠成。
于是,開(kāi)始研究Gvim的配置文件(_vimrc), 現(xiàn)在給大家看一下我產(chǎn)生亂碼之前的配置(注:我之前修改過(guò)):
復(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è)置默認(rèn)背景色
colors desert
"設(shè)置不自動(dòng)備份
set nobackup
"設(shè)置默認(rèn)字體和大小
set guifont=Courier_New:h12:cANSI
set termencoding=gbk
set encoding=utf-8
"產(chǎn)生問(wè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
這里需要說(shuō)明一下:配置文件里enconding,fileeconding,fileecondings的含義:
encoding: GVim 內(nèi)部使用的字符編碼方式,包括 Vim 的 buffer (緩沖區(qū))、菜單文本、消息文本等。
用戶(hù)手冊(cè)上建議只在 .vimrc 中改變它的值,事實(shí)上似乎也只有在 .vimrc 中改變它的值才有意義。
fileencoding: GVim 中當(dāng)前編輯的文件的字符編碼方式,Vim 保存文件時(shí)也會(huì)將文件保存為這種字符編碼方式 (不管是否新文件都如此)。
fileencodings: GVim 啟動(dòng)時(shí)會(huì)按照它所列出的字符編碼方式逐一探測(cè)即將打開(kāi)的文件的字符編碼方式,并且將 fileencoding 設(shè)置為最終探測(cè)到的字符編碼方式。
因此最好將 Unicode 編碼方式放到這個(gè)列表的最前面,將拉丁語(yǔ)系編碼方式 latin1 放到最后面。
其中:chinese 就是 cp963編碼
只到這里我突然想起來(lái),我的瀏覽里默認(rèn)的字符集是 GBK的,而_vimrc里的設(shè)置編碼是utf-8的,二者不對(duì)應(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
修改完成之后,重新啟動(dòng)Gvim,中文亂碼問(wèn)題解決了。
您可能感興趣的文章:
- Python 自動(dòng)補(bǔ)全(vim)
- 使用python開(kāi)發(fā)vim插件及心得分享
- PHP語(yǔ)法自動(dòng)檢查的Vim插件
- Android中vim編輯器進(jìn)階的使用介紹
- 開(kāi)源文本編輯器Vim推出7.1穩(wěn)定版 下載
- 手把手教你將Vim改裝成一個(gè)IDE編程環(huán)境(圖文) 吳垠
- VIM中設(shè)置php自動(dòng)縮進(jìn)為4個(gè)空格的方法詳解
- linux系統(tǒng)中使用Vim刪除偶數(shù)行或者奇數(shù)行
- ruby開(kāi)發(fā)vim插件小結(jié)
- Vim進(jìn)行文件目錄操作小結(jié)
相關(guān)文章
PHP實(shí)現(xiàn)的折半查詢(xún)算法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的折半查詢(xún)算法,結(jié)合完整實(shí)例形式分析了php使用遞歸與非遞歸實(shí)現(xiàn)折半查詢(xún)的算法操作步驟與使用方法,需要的朋友可以參考下2017-10-10
PHP獲取欄目的所有子級(jí)和孫級(jí)欄目的ID號(hào)示例
這篇文章主要介紹了PHP獲取欄目的所有子級(jí)和孫級(jí)欄目的ID號(hào)的具體實(shí)現(xiàn),需要的朋友可以參考下2014-04-04
PHP中查詢(xún)SQL Server或Sybase時(shí)TEXT字段被截?cái)嗟慕鉀Q方法
在CSDN的PHP版里老是看到有人問(wèn)TEXT字段被截?cái)嗟膯?wèn)題,偶也回答了無(wú)數(shù)次,今天索性就總結(jié)一下吧2009-03-03
php session 寫(xiě)入數(shù)據(jù)庫(kù)
這篇文章主要介紹了php session 寫(xiě)入數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2016-02-02
PHP使用CURL實(shí)現(xiàn)多線程抓取網(wǎng)頁(yè)
PHP 利用 Curl 可以完成各種傳送文件操作,比如模擬瀏覽器發(fā)送GET,POST請(qǐng)求等等,然而因?yàn)閜hp語(yǔ)言本身不支持多線程,所以開(kāi)發(fā)爬蟲(chóng)程序效率并不高,不過(guò)可以用 Curl ,借助Curl 這個(gè)功能實(shí)現(xiàn)并發(fā)多線程的訪問(wèn)多個(gè)url地址以實(shí)現(xiàn)并發(fā)多線程抓取網(wǎng)頁(yè)或者下載文件2015-04-04
php通過(guò)COM類(lèi)調(diào)用組件的實(shí)現(xiàn)代碼
COM(Component Object Model)組件對(duì)象模型,是一種跨應(yīng)用和語(yǔ)言共享二進(jìn)制代碼的方法。COM可以作為DLL被本機(jī)程序載入也可以通過(guò)DCOM被遠(yuǎn)程進(jìn)程調(diào)用2012-01-01
php生成百度sitemap站點(diǎn)地圖類(lèi)函數(shù)實(shí)例
這篇文章主要介紹了php生成百度sitemap站點(diǎn)地圖類(lèi)函數(shù)的方法,詳細(xì)講述了百度站點(diǎn)sitemap的實(shí)現(xiàn)方法與注意事項(xiàng),在web站點(diǎn)的建設(shè)中非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10

