2003-11-14 09:31:32

mozex 與中文

mozex 是一個 Mozilla 的外掛模組. 它對 Mozilla 加強了許多功能, 像是使用外部編輯器來看 HTML 源碼, 以偏好的程式來處理不同的連結. 我最喜歡的, 是以外部編輯器來編輯 textarea 裡的資料.


Mozilla 本身雖然有提供一些基本的編輯功能, 但是畢竟不是文字編輯器, 用起來不甚順手. 而且每個人都有偏好的文字編輯器, 能夠使用自己順手的工具, 來編輯一篇較長的文字 (像是這一篇. :), 不是很好嗎?

可惜的是, mozex 存出來的文字檔, 無法被文字編輯器正確地辨識. 簡單地說, Mozilla 本身以 Unicode 來儲存內部的文字, 也就是兩個位元組. 但是寫出時, 卻只會寫入每個字的 低位元組! 例如以 快紀 兩個字作測試. 它在 Mozilla 中的表示為:

5feb 7d00

但是實際存進檔案時, 變成:

eb 00

我對它修改了一下, 在寫入檔案之前, 先轉成 UTF-8 的字元串流, 然後讀檔之後, 再轉回 Unicode. 這樣就可以正確地被可辨識 Unicode 的文字編輯器所使用. 以下是對 v1.07 的 mozex 的 patch (或者你可以從這裡下載):

diff -ruN content/mozex/mozex.js content.new/mozex/mozex.js
--- content/mozex/mozex.js	Sun Sep 21 17:14:58 2003
+++ content.new/mozex/mozex.js	Fri Nov 14 00:07:55 2003
@@ -865,11 +865,16 @@
             return false;
         }
        
+        var uc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].
+          createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
+        uc.charset = "UTF-8";
+        var data_stream = uc.ConvertFromUnicode( data );
+
         var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].
                      createInstance(Components.interfaces.nsIFileOutputStream);
         var PR_WRONLY = 0x02;
         stream.init(file, PR_WRONLY, 0600, 0);
-        stream.write(data, data.length);
+        stream.write(data_stream, data_stream.length);
         stream.flush()
         stream.close();
     } 
@@ -898,7 +903,10 @@
             var data = sis.read(sis.available());
             sis.close();
             is.close();
-            return data;
+        var uc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].
+          createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
+        uc.charset = "UTF-8";
+            return uc.ConvertToUnicode( data );
         }
         else {
             mozexError("temporary file '" + filename + "' does not exist or is not readable");

使用方式:

  • 安裝 mozex.
  • ~/.mozilla/user_name/foobar.slt/chrome, 將 mozex.jar 以 unzip 解開來. 你會看到新產生一個 content 目錄.
  • 套用以上的 patch. 這個 patch 只會修改 content/mozex/mozex.js 而已.
  • 刪除原先的 mozex.jar, 將 content 目錄以 zip 再壓回 mozex.jar.
  • 重新啟動 Mozilla.

現在, mozex 應該就會輸出可正確被文字編輯器使用的 utf-8 檔案了. 本篇 blog 就是以 mozex, 在 Emacs 上寫成的. :)

由 plasma 於 2003-11-14 09:31:32 所發表
迴響

bravo!!

foxfair 於 2003-11-14 09:43:31 所發表
發表評論










請依上圖輸入檢核碼: