迷霧之眼
關於部落格
一種想看透事物本質的天性 深知混雜其中不如靜靜地旁觀 發覺出想知道的答案



_uacct = "UA-445744-2";
urchinTracker();
  • 11070

    累積人氣

  • 0

    今日人氣

    0

    訂閱人氣

[Tech-TS] Flash-ASP 編碼問題

事情的經過是這樣的,最近因為幫同事寫個 Flash ,因為 Flash 自 Flash MX 版後就是預設使用 UTF-8 的編碼格式,本來這也不是什麼大不了的事情,可是問題就出在 Flash 本身和 Javascript 一樣基於安全性的考量,不提供 Local Disk 的寫入功能,所以為了能將 Flash Actionscript 所取得的資料記錄起來,所以後端就必須透過 PHP 或 ASP 之類的幫助才能達成。好死不死,公司的那台機器環境偏偏又是用自己懂一點,卻又不是懂很多的 ASP 所架構的,所以只能將資料由 Actionscript 丟給 ASP 來處理。因為預測資料筆數不大,而且我也沒有什麼太多的時間做(都是利用下班趕),所以不考慮用資料庫去處理,直接把它存成純文字檔。 因為網頁的版面構成是另外交給外包的美編處理,所以問題就出在整合的時候。測試時我負責的 Flash 動作正常,串接後端的 ASP 也沒問題,但一旦串起美編負責的網頁,乖乖,Flash 最後的留取資料欄位居然無法輸入中文(英數字可以),檢查了幾次都確定程式沒有問題,但是始終沒辦法執行。完了,因為是網頁已經放上去才發現,所以只能硬著頭皮趕快找出解決之道。在歷經一週的努力,今晚終於發現原問題來是發生在一個很細微的地方,看了幾次都不會想到的處所。那就是現在網頁都會有的: !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-TW" lang="zh-TW" meta http-equiv="Content-Type" content="text/html; charset=big5" 而美編的網頁上是: !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" html meta http-equiv="Content-Type" content="text/html; charset=big5" 差別就差在 html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-TW" lang="zh-TW" 這一行。修改完了之後,不能在 Flash 中輸入的問題就解決了。之前一直抓不到真正的原因,改 charset 、試 codepage、設 ContentType ....根本都是白忙一場。 解決一個問題,緊接著馬上又遇到另一個問題:輸出的 Text File 裡中文變成亂碼。這也難怪,源頭 Flash 是用 UTF-8 編碼, Windows 的 Text File 預設是用 ANSI 編碼,ASP 在拋轉寫入時如果不經過處理,自然會產生亂碼。所以才高興沒多久,接著就得馬上處理這個問題。 那麼用 ASP 要怎麼處理編碼格式呢?翻了翻手邊的資料,書上講的都是做者認為重要但卻沒有我需要的資料。上網找吧?現在大家都紛紛改用 ASP.Net 了,所以原本許多的網站也都改版,反而變成 ASP 的文件難找(雖然不是沒有),學習並改用 ASP.Net 又遠水救不了近火。問人吧?問問有學過 ASP 的人,結果斬釘截鐵地告訴我:根本沒有。(當然,事後證明他是錯的) 摸索了好一會,一一經過 Try ans Error 的土方法,問題終於解決了,而且並不複雜。網路上有人提到利用 ADODB.Stream 的方法處理(例一例二),但因為後來網路上也發現 ADODB 有安全性漏洞,所以微軟是建議關閉(反正會用微軟的人也改成 ASP.Net 了)。所以後來在另外參閱一篇文件並試用後,證實不必透過那些繁復的手續,可以使用 codepage 的方法搭配 FSO 就可以輕鬆解決。之前並不是沒試過 codepage ,不過差異出在參數,不需那些有的沒的,只要在 ASP 的第一行加上:@ codepage=65001 就可以了。Text File 也不必另外改存成 UTF-8 的格式(改了反而不正常)。
相簿設定
標籤設定
相簿狀態