Discussion:
想請教一個編碼的問題..
(时间太久无法回复)
j***@kkcity.com.tw
2007-04-19 09:46:09 UTC
Permalink
有一個問題一直困擾我很久,想請問一下各位程式的高手

最近在學jsp網頁的時候,常常會遇到編碼的問題

比如說..<%@page contentType="text/html;charset=Big5"%>
這一行好了..

雖然書上有解釋,這一行的內容是啥

大概是這樣說的,此jsp網頁的內容設定為text/html格式,編碼方式為中文big5碼

可是我還是有看沒董..

還有類似像這樣的敘述...request.setCharacterEncoding("big5");

我也是有看沒董..

我對jsp的一些語法,使用方式..包括連接資料庫的概念都具備了..

可是獨獨對編碼的方式,還有我看網頁上很多人都有發表一些有關於

處理資料庫中文輸出變成亂碼的文章...

還是有看沒董..

因為我並非本科系出身..對程式語言的編碼,以及什麼是編碼也好像一知半董

有沒有人可以解釋一下...有關於

1.什麼是編碼
2.為什麼需要編碼

3.<%@page contentType="text/html;charset=Big5"%>
request.setCharacterEncoding("big5");這兩行的意義到底是啥

4.為啥部處理編碼問題,會有中文變亂碼的情形

謝謝..
--
┌─────◆KKCITY◆─────┐    KKCITY 市民小密技 -文章標題上-  ◣
│ bbs.kkcity.com.tw │   Ctrl+y 可設定單篇文章加密
└──《From:59.104.1.232 》──┘ ◤  Shift+y 可設定單篇文章密碼
--
._.
2007-04-19 10:53:58 UTC
Permalink
你要知道, 在電腦裡面的東西都是 0 (2進位) 或 1 (2進位).
都不是給人看的東西, 要人去定義說什麼是什麼,
那這些 0101 (2進位) 的東西才會有意義.

好, 問題來了, 今天我自己定義一套 1~26 (10進位) 是 A~Z,
別人要怎麼知道說我儲存的 000111101010 (2進位) 是什麼鬼東西?

所以我要把編碼明確的寫好 000001 (2進位) 是什麼, 000010 (2進位) 是什麼.
然後還要給這個編碼表一個名字, 可能不會是我給的.
別人再運用這些規則就可以把這些 000001 (2進位) 解讀成 A 顯示在螢幕上.

如果這個部分你無法理解, 請用任何可以顯示 16 進位的編輯器 (例:UltraEdit)
去用 16 進位模式看看文字原始的面貌.

好了, 那有了 A~Z, 就夠了嗎?
日本有自己的 50 音 (JIS), 韓國有圈圈直線, 對岸是簡體字, 我們是繁體字.
這些難道當初發明電腦的人會去幫你編好那些碼嗎? 不可能嘛.

所以大家就會自行去定義 0101
來把自己國家特殊語言編碼描述出來.

不然電腦只會顯示英文有意義嗎? 我只打英文給你看你看的懂嗎?

但是沒有一個共通的協定, 就會撞嘛.
我定義 1~26 (10進位) 是 A~Z, 人家 ASCII 卻說 065~090 (10進位) 是 A~Z
那預設用 ASCII 來讀我自己亂寫的編碼過檔案, 只會出現一堆看不懂的東西而已

所以後來才會有 Unicode 或 UTF-8 之類的東西..

現在大家都學乖了, 我要讓你看懂, 我們就先講好
我在檔案開頭說這是什麼檔案, text/html 代表的就是一般的平文,
不是什麼圖片或程式, 那個編碼又是不一樣的東西.
然後就算是平文, 也不是所有編碼都一樣, 我還是要講他是 ASCII, Big5..etc.
那你來讀我的檔案, 你先看過檔案開頭, 你就不會亂解一通.

光中文就可以用 Unicode, CNS11634 (大概吧?), Big-5...etc 等等去解讀.
那用不同的編碼去解讀通常會有不同的結果.

總之, 在電腦裡面的都是 0101 (2進位), 要看懂就是要定義他是什麼.
編碼表就像字典檔一樣, 可以把那些 0101 (2進位) 變成文字.
但是字典也有英文字典德文字典法文字典...etc
所以翻回來的結果自然也會不同.

※ 引述《***@kkcity.com.tw ( )》之銘言:
: 有一個問題一直困擾我很久,想請問一下各位程式的高手
: 最近在學jsp網頁的時候,常常會遇到編碼的問題
: 比如說..<%@page contentType="text/html;charset=Big5"%>
: 這一行好了..
: 雖然書上有解釋,這一行的內容是啥
: 大概是這樣說的,此jsp網頁的內容設定為text/html格式,編碼方式為中文big5碼
: 可是我還是有看沒董..
: 還有類似像這樣的敘述...request.setCharacterEncoding("big5");
: 我也是有看沒董..
: 我對jsp的一些語法,使用方式..包括連接資料庫的概念都具備了..
: 可是獨獨對編碼的方式,還有我看網頁上很多人都有發表一些有關於
: 處理資料庫中文輸出變成亂碼的文章...
: 還是有看沒董..
: 因為我並非本科系出身..對程式語言的編碼,以及什麼是編碼也好像一知半董
: 有沒有人可以解釋一下...有關於
: 1.什麼是編碼
: 2.為什麼需要編碼
: 3.<%@page contentType="text/html;charset=Big5"%>
: request.setCharacterEncoding("big5");這兩行的意義到底是啥
: 4.為啥部處理編碼問題,會有中文變亂碼的情形
: 謝謝..

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.64.225.194
!H45
2007-04-19 11:23:58 UTC
Permalink
http://local.joelonsoftware.com/mediawiki/index.php/The_Joel_on_Software_Translation_Project:%E8%90%AC%E5%9C%8B%E7%A2%BC

嗯,之前不知道從哪裡看到的連結,好像是 CSSE?
不管了,這一篇的篇名是:

每個軟體開發者都絕對一定要會的Unicode及字元集必備知識(沒有藉口!)

※ 引述《ogamenewbie (._.)》之銘言:
: : 4.為啥部處理編碼問題,會有中文變亂碼的情形
: : 謝謝..

小改一下,縮網址在這邊:http://0rz.tw/e01mt

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.85
※ 編輯: H45 來自: 140.115.205.85 (04/19 19:23)
最愛老婆的老公
2007-04-20 08:34:22 UTC
Permalink
: 3.<%@page contentType="text/html;charset=Big5"%>
: request.setCharacterEncoding("big5");這兩行的意義到底是啥
: 4.為啥部處理編碼問題,會有中文變亂碼的情形
: 謝謝..
<%@page contentType="text/html;charset=Big5"%> 這行是簡單說...
就是告訴瀏覽器:我這東西內容是"text/html",請用Big5的編碼解讀
它是response物件;假如沒寫的話就要看伺服器的設定了,例如 Tomcat,
它的預設編碼為ISO-8859-1

request.setCharacterEncoding("big5"); 這行是說,用戶端送來的請求
你用Big5來解讀,假如用戶端送來的編碼是UTF-8,而你用Big5來解讀就會
是亂碼囉

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.228.181.11
最愛老婆的老公
2007-04-20 15:36:14 UTC
Permalink
※ 引述《ysss1213 (最愛老婆的老公)》之銘言:
: : 3.<%@page contentType="text/html;charset=Big5"%>
: : request.setCharacterEncoding("big5");這兩行的意義到底是啥
: : 4.為啥部處理編碼問題,會有中文變亂碼的情形
: : 謝謝..
: <%@page contentType="text/html;charset=Big5"%> 這行是簡單說...
: 就是告訴瀏覽器:我這東西內容是"text/html",請用Big5的編碼解讀
: 它是response物件;假如沒寫的話就要看伺服器的設定了,例如 Tomcat,
: 它的預設編碼為ISO-8859-1
sorry,說錯了,沒寫的話是JSP規格書規定的ISO-8859-1編碼,不是伺服器
我說的Tomcat應該是URI的編碼(Connector of URIEncoding attribute)
: request.setCharacterEncoding("big5"); 這行是說,用戶端送來的請求
: 你用Big5來解讀,假如用戶端送來的編碼是UTF-8,而你用Big5來解讀就會
: 是亂碼囉

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.226.68.236

Loading...