幾種亂碼問題(轉)
用什么編輯器可以使xml文件的中文變成UTF-8亂碼
我把g b2312改成UTF-8瀏覽器提示出錯~~~
最簡單的Word應該可以完成轉換,另外UE和Edit++都支持轉換
=======================================================
在寫一個東東,是sqlserver后臺,用utf-8編碼,一直是剛出來還可,一刷新就成亂碼了,以為是sql的原因,一次
把<title></title>里的全刪了,就沒問題了,后來發現,最好把<META
http-equiv=Content-Type content="textHtml;
charset=utf-8">放在title前,不然有些還是會錯!
=======================================================
為每個jsp頁面設置了其編碼格式(utf-8),但傳遞數據到另一頁面時依然顯示為亂碼? 首先要需要了解的是web容器默認編碼是iso-
8859-1,一個漢字占用兩個字節,而在utf-8中一個漢字占用三個字節。所以在數據傳遞過程中,必須手動設定容器編碼格式,否則會出現字符位丟失的
情況。即3個字節變為兩個字節,自然會變成亂碼。為什么保存到數據庫中的數據都變成了亂碼? 原理同上,首先要搞清楚使用的數據庫默認的編碼格式,比如
mysql默認的字符編碼是ISO-8859-1。所以必須手動修改其默認編碼格式。 清楚了以上問題后,再來看如何解決utf-8的亂碼問題。
1:設置web容器的編碼格式。為你的servlet的doGet或doPost方法開始處加入如下代碼:request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
2:為每個jsp頁面指定其編碼格式。<%@ page pageEncoding="utf-8"%>
3:在連接數據庫用的URL后加入:useUnicode=true;characterEncoding=utf-8 如: url="jdbc:mysql:///db1?useUnicode=true;characterEncoding=utf-8",
4:為指定數據庫默認編碼格式。在C:\WINDOWS目錄下找到my.ini文件,并在[mysqld]中加入default-character-
set=gbk,重新啟動mysql服務。 至此,亂碼問題全部解決。起初總搞上去不清,為什么要將mysql的默認編碼格式設置為gbk,后來由相關
的資料得知utf-8默認輸入編碼方式為gbk,默認輸出編碼方式為utf-16be。 個人認為,將數據進行utf-8進行編碼的目的(即將中文編碼
為%的形式),主要是為了在多層服務間進行數據傳輸時,防止發生字符丟失(如msn)。普通的web程序顯然沒有必要這樣做,只要使用以上方法進行處理,
就可以有效的解決亂碼問題,從而結省存儲空間。如果都像公司的SC系統那樣,將一個漢字編碼為18個字符后,再存儲到數據庫中,拋開效率不說,就存儲空間
的浪費就夠人受的,要知道,那是需要銀子地!
========================================================
ASP動態網頁下UTF-8頁面亂碼的解決方法
為什么在ASP里指定了codepage為65001還經常顯示亂碼。才子在這里將這個問題詳細解釋一下,以免很多朋友再走彎路,甚至排斥UTF-8。
如果你還不知道UTF-8是什么東東,那才子建議你先去搜索一下UTF-8的相關資料吧。
UTF-8編碼之所以被越來越多的人接受甚至喜歡,肯定是有道理的,在WEB2.0盛行的今天,在大談多瀏覽器兼容的同時,不得不想到字符編碼不同所造成的亂碼現象同樣需要得到很好的處理..... CHINAZ
在N年以前,IE6以下的所有版本,只要沒有安裝相應的字庫,訪問相關的頁面都是會亂碼的,例如,我是IE5 (Windows2000默認) 的版本,在沒有安裝IE繁體字庫的情況下,訪問任何繁體頁面的網站都是會亂碼的,當然前提是該頁面采用了BIG5的Charset,而UTF-8作為一種 國際編碼就能很好的處理該問題,只要將頁面存為UTF-8編碼格式,再在頁面上將codepage及charset全部定義為utf-8就可以在任何客戶 端瀏覽器中顯示出完全正確的內容,完全不會亂碼......
好了,這里以ASP頁面為例,以一個實例來看具體操作吧:
打開新建一個ASP頁面,相信玩ASP的朋友都會留意到,許多下載的源碼里,頁面最上方一般都有一句:
以下為引用的內容:
%@LANGUAGE="VBSCRIPT" CODEPAGE="936"% CHINAZ
CHINAZ
前面的language應該不用多說了,vbscript就是ASP默認的腳本語言,其實完全可以不用寫,寫了好像還會影響頁面執行效率,在這里我 們先不討論這個問題。后面的codepage就是關鍵了,目的就是告訴瀏覽器,此頁面是何種編碼,936代表是簡體中文,而950代表繁體中 文,65001就是我們今天說的UTF-8編碼了。我們將936改成65001。整句如下: CHINAZ
以下為引用的內容:
%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%
再加上輸出幾個中文字看看能不能正確顯示吧。 CHINAZ
以下為引用的內容:
<%
Response.Write "第一次測試UTF-8頁面"
%>
OK,直接點擊“保存”,執行這個頁面看看,如果不出意外,大家可能看到顯示出的是 “一尾UTF-8頁”這幾個字,中文有亂碼的現象,什么原因呢?
OK,請大家再點擊最上面的 "文件" 菜單,選擇"另存為",最下面一行有個編碼,默認應該是ANSI的,請大家點下拉框,選擇UTF-8,再點保存,再執行試試看,如果不出意外,亂得更厲害 了,呵呵,暈了吧。別急,想想原因,因為我們做的頁面是HTML返回的,以前我們寫HTML時,看到body前面,也就是head里都有一句meta,應 該是這樣的:
以下為引用的內容:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
也就是指定頁面以gb2312編碼返回結果,一定要寫在有返回結果輸出的前面。大家都知道gb2312是簡體中文吧,我們今天說的是UTF-8編碼,我們就將gb2312改成UTF-8吧,全部代碼如下: CHINAZ
以下為引用的內容:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<%
Response.Write "第一次測試UTF-8頁面"
%>
一,文件沒有存為對應的格式,
可能有網友認為將META元標記的解碼方式改一下,就可以實現GB2312轉UTF-8,或者UTF-8轉GB2312,這其實是錯誤的,雖然你把 GB2312編碼的網頁的Meta標記改為了Utf-8,但這樣的操作會讓你發現網頁出現了亂碼。究其原因你文件編碼格式還是gb2312的,這時你應把 文件存為utf-8,再改meta標記的解碼方式。對于將文件存為utf-8,很多朋友可能會用記事本去操作,我不建議這樣去做,因為用記事本轉換的編碼 而做的網頁會在W3C效驗時出現BOM錯誤,具體如下
Byte-Order Mark found in UTF-8 File. The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.
你可以用比較新版本的editplus和ultraedit都可以選擇保存為無BOM的utf-8格式。
二,文件缺少必要的標識
檢查Html標記里有沒有如下
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
檢查XML文檔里有沒有
<?xml version="1.0" encoding="utf-8"?>
utf-8或者gb2312,看你文檔的編碼。
如果是ASP動態頁面,最好加上以下幾句
以下為相關html文檔
<%@ LANGUAGE = "VBScript" CodePage = "65001"%>
CodePage = "65001"中的65001代表是UTF-8編碼的文檔,GB2312編碼的是936
以下為相關vbscript文檔
Session.CodePage=65001
另外網上還有如下的ASP代碼,我沒試過
以下為相關vbscript文檔
Response.Charset="utf-8"
結論:采用UTF-8編碼,除了要將文件另存為UTF-8格式之外,還需要同時指定codepage及charset。
posted on 2009-05-01 18:12 drecry 閱讀(504) 評論(0) 編輯 收藏 所屬分類: html