iT邦幫忙

0

javascript 轉碼問題 utf-8 轉成 big5

etwang 2010-10-18 11:43:0823617 瀏覽

javascript 轉碼問題 utf8 轉成 big5

想請教一下有人知道如何用 javascript 轉碼 utf-8 轉 big5 嗎??
由於我的網頁必須用 asp.net 2005 設計,前端程式會用一些 javascript 控制
asp.net 開啟的頁面預設都是 utf-8 改了好像也都沒用,
就算<m e t a h t t p-equiv="Content-Type" content="text/html; charset=big5" />
改了頁面開啟還是會變成utf-8,
因為我目前想要在 javascript 呼叫並傳訊息給一個外部網頁,而那個外部網頁
只接受big5(外部網頁是php作的),
所以如果我直接傳的話網頁收到的就會是亂碼,
也就是說我必須先編碼,我有用過以下 3 個 javascript 指令
escape,encodeURI,encodeURIComponent,轉出來的值都不是我要的
例如我要轉測試的(測)
用escape('測')轉出來會是(%u6E2C)
用encodeURI('測')轉出來會是(%E6%B8%AC)
用encodeURIComponent('測')轉出來也會是(%E6%B8%AC)
實際上我要的應該是要轉成(%B4%FA)才對
不過我有試著用一個純html設定utf-7用escape('測')
轉出來就是(%B4%FA)沒錯,但重點是我是要用asp.net開發

還有一個問題,就是外部網頁會在畫面回傳一個文字訊息
請問我要如何用 javascript 抓到那個訊息呢
我是用 wind1=window.open('對方網頁'); 呼叫網頁
所以我會用 str=wind1.document.xx 接收資料
但由於對方網頁回傳的只有一個文字訊息如(msg=123456)
所以document 後面都不曉得要用什麼收

以上問題不知有誰可以幫我解答謝謝!!!

6
fillano
iT邦超人 1 級 ‧ 2010-10-18 13:58:49
最佳解答

建議你在asp內部對要用big5編碼的資料預先處理,然後轉成URL編碼格式的字串,在交給Javascript處理。光靠Javascript會有點困難...

關鍵在於不知道有沒有人做好一個純javascript的utf-8 to big5的對照表,如果有的話用Javascript是還ok。如果有的話,可以用charCodeAt取出每個utf8編碼的字的數值,然後查表取得big5編碼的對應數值。接著就可以寫一個簡單的數字轉Hex字串的功能把他轉成URL編碼的格式。

fillano iT邦超人 1 級 ‧ 2010-10-18 13:59:48 檢舉

例如參考這篇:
http://www.neo.com.tw/archives/335

不過我.net不熟。

etwang iT邦新手 5 級 ‧ 2010-10-20 09:16:27 檢舉

看來好像真的應該沒有比較簡單的轉碼方式了
所以我目前可能會先用兩種方式處理看看
一種就是如 http://www.neo.com.tw/archives/335
用後端先轉,再由 Javascript 抓取
一種就是直接用對照表的方式了

4
player
iT邦大師 1 級 ‧ 2010-10-18 15:33:21

fillano提到:
純javascript的utf-8 to big5的對照表,如果有的話用Javascript是還ok。如果有的話,可以用charCodeAt取出每個utf8編碼的字的數值

你用 ASP.NET的話
網站的全域設定
是預設輸出成 utf-8 的
你要在你的網頁的Server端用指定Http檔頭的方式
去通知用戶端的瀏覽器變更語系

你可以參考
Setting the HTTP charset parameter
http://www.w3.org/International/O-HTTP-charset

etwang iT邦新手 5 級 ‧ 2010-10-19 08:30:05 檢舉

我這有 big5 to utf-8 的文字檔,所以應該可以試試用對照表的方式
ASP.NET 很怪不管怎麼改,就算畫面看起來編碼已經變了,但javascript轉出的還是 utf-8

fillano iT邦超人 1 級 ‧ 2010-10-19 17:07:24 檢舉

這是javascript的本質,所有東西變成字串就會轉成utf-8,所以基本上是不能用字串處理utf-8之外編碼的資料。(他的字串,是unicode組成的sequence)

網頁之外的Javascript環境,以nodejs為例,他特別提供了一個Buffer物件,用來處理binary資料。

5
simon88
iT邦研究生 3 級 ‧ 2010-10-19 13:28:44

以前在Asp裡面,我是這樣子處理的,
先用session.codepage 950 ,response你要傳送的文字,
做完再session.codepage 65001轉回utf-8了 。

另一個接收訊息,你要自己另外寫一支接收的網頁,
判斷完成之後,導向你原本的網頁就行了

我要發表回答

立即登入回答