2006-12-12 23:00 Flash Player for Firefox Plugin 本機路徑 Bug
Flash Player for Firefox Plugin 本機路徑 Bug
在本機硬碟上用 Firefox 瀏覽器播放含有中文路徑的 Flash Movie 時
用 NetStream.play 或是 Sound.loadSound 命令讀取外部檔案失敗
但是改用絕對路徑卻是OK
後來發現 Flash Player for Firefox Plugin 的 _url 有 Bug
以下分別用 IE、Firefox 撥放中文路徑下的 Flash Movie
測試 ActionScript _url 屬性
IE:
![]()
Firefox:
![]()
在 Firefox 上,_url 中文部分為亂碼
是編碼錯誤
ActionScript 1.0、2.0 雖然無法做到各種編碼轉換
但是利用 System.useCodepage、escape、unescape
至少可以做到 UTF-8 與 OS Default Charset 之間的轉碼
以下便是利用 AS 轉碼,修正中文路徑的問題
ActionScript Class:
class idv.ticore.as2.utils.URLFix {
public static function encodeUtf8(s:String):String {
var useCodepage:Boolean = System.useCodepage;
System.useCodepage = true;
var escapeStr:String = escape(s);
System.useCodepage = false;
var resultStr:String = unescape(escapeStr);
System.useCodepage = useCodepage;
return escapeStr;
}
public static function encodeOSCharset(s:String):String {
var useCodepage:Boolean = System.useCodepage;
System.useCodepage = false;
var escapeStr:String = escape(s);
System.useCodepage = true;
System.useCodepage = useCodepage;
return escapeStr;
}
public static function fixUrl(s:String):String {
var useCodepage:Boolean = System.useCodepage;
System.useCodepage = false;
var result:String = unescape(encodeUtf8(s));
System.useCodepage = useCodepage;
return result;
}
public static function getFixedUrl(s:String):String {
if (System.security.sandboxType == "remote") {
return s;
}
if (System.capabilities.playerType != "PlugIn") {
return s;
}
var useCodepage:Boolean = System.useCodepage;
System.useCodepage = false;
var url:String = fixUrl(unescape(_url));
System.useCodepage = useCodepage;
var urlToken:Array = url.split("/");
urlToken.pop();
return urlToken.join("/") + "/" + s;
}
}
使用方式:
import idv.ticore.as2.utils.*;
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
var video:Video;
video.attachVideo(ns);
ns.play(URLFix.getFixedUrl("video.flv"));
相關參考資料:
2007/01/04 updated
經 kumas 測試,此方式只對部分中文字有效
某些中文路徑,還是會有解碼問題。 例如:
c:test多國語言路徑
URLFix.getFixedUrl("video.flv"); 回傳 c:testvideo.flv
查出在 URLFix.fixUrl(unescape(_url)); 解成亂碼。
註:測試版本 Firefox 2.0 + Flash player 9
回應

