軟件測試之編程亂碼問題初步探索[1] 軟件測試工具
關鍵字:亂碼亂碼的問題分為很多種,很多人一見到有亂碼就開始罵mysql,其實很多情況下并不是mysql造成的。
從亂碼產生的原因來分析,亂碼的產生一般有以下幾種情況。
1、網頁編碼與程序編碼不一致的問題
所謂的網頁編碼問題就是指你的html代碼中定義的“charset”,例如以下這段代碼:
<head>
<title>Chat Tutorial Application</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="language" content="en" />
<meta name="author" content="Padraic Brady" />
<link rel="stylesheet" href="public/styles/chat.css" type="text/css" />
<script src="public/javascript/scriptaculous/lib/prototype.js"
type="text/javascript"></script>
<script src="public/javascript/scriptaculous/src/scriptaculous.js"
type="text/javascript"></script>
<script src="javascript/chat.js" type="text/javascript"></script>
</head>
他設置了瀏覽器端采用gb2312的字符集,此時如果程序使用的是utf8的編碼(就是指以什么樣的編碼來編寫的程序,一般在編輯器中設置),那么就會產生亂碼。
此時的解決方法就是把charset的值改為utf8。
2、代碼本身就存在亂碼問題
這種情況是指你的代碼本身就存在亂碼問題。照成這種情況的原因一般是你以另一種編碼格式修改了你的代碼后并做了保存,這樣你的程序中就有幾種編碼形式的代碼,那么輸出的時候自然就會有亂碼。這類問題相對來說比較容易解決,只要人工找到那段有亂碼的代碼,然后修改就行了(很多編輯器可以完成這個工作)。
3、mysql的問題(此次討論僅圍繞mysql5.0之后的版本展開)
現在再來看最容易照成亂碼,也是最容易讓人迷糊的mysql亂碼問題。
要說mysql亂碼,得先從mysql的幾個參數說起,從mysql5開始,多了幾個設置字符集的系統變量:
character_set_client 客戶端字符集 character_set_connection 客戶端與服務器端連接采用的字符集 character_set_results SELECT查詢返回數據的字符集 character_set_database 數據庫采用的字符集
亂碼問題一般是由于以上幾個變量設置錯誤照成的,很多人在請教亂碼問題的時候,一般都會得到一個這樣的答案:“你先set names一下”。
原文轉自:http://www.anti-gravitydesign.com