[前話]

上次把一號機的 OS 換成 x64 Windows Server 2003 Enterprise Edition (English, w/ Traditional Chinese MUI) 後,
執行新裝的 FileZilla 馬上就發現一些事情四夫不太對勁...

裝了 MUI 之後理論上系統要支援中文吧?
不管是 zh_TW.Big5 還是 zh_TW.UTF-8 ,應該都要支援才對,
事實上如果是看網頁的話,不管是 Big5 還是 UTF-8 encoded 的網頁都可以正確顯示,
表示系統的確支援這兩個 codepage 的中文顯示(有 codepage 跟相對應字型)。

但是 FileZilla 顯示出來的狀況卻不是這個樣子,
我連上去的 ftp server 是跑 pure-ftpd 1.0.20_2 , server 未指定 encoding ,
系統 file system 是 ffs ,檔案用 Big5 存的。

用 PuTTY w/ Big5 encoding 連上去看的話是一切正常,中文字都很正確的顯示,
但是如果用 x64 Windows 2003 下面的 FileZilla 連上去看的話卻都會變成亂碼,
找了一下 FileZilla 的設定,發現基本上除了 site manager 那邊之外沒有可以指定連線 encoding 的地方,
而 site manager 那邊不管是設定定 force UTF-8 還是 never UTF-8 都一樣顯示亂碼。

但是如果用繁體中文的 x86 Windows 2000 或 Windows XP 下面的 FileZilla 連線的話就都很正常,
中文都一字一字正常顯示出來。

然後我在 debug 的選單中找到了一個 "show raw directory listing" 的選項,
開起來之後發現 message log 視窗顯示出來的 raw directory listing 都是正確的中文,
但是 remote file listing 那邊怎樣就是看不到...就是亂碼。

當時在谷歌上找了一下看看有沒有人也遇過這個問題,
不過似乎是使用這種 system configuration 的人太少了,一個子兒都找不到,
谷歌吐出來的盡是些「 FileZilla 對中文及 UTF-8 支援沒有問題」的網頁,
所以也就先擱著了,當成 FileZilla 在英文 x64 Win2003 + MUI 的狀況下對中文支援有 bug 吧。

***

[後話]

今天試著把 ls04 上面跑的 pure-ftpd 換成了支援 RFC2640 的版本 1.0.21 ,
然後想說「反正 server 都支援 UTF-8 了,就把檔名也換成 UTF-8 試試看」,
於是就裝了 /ports/converter/convmv 這個 port ,
裝完試跑了一下,發現有一些 Big5 文字並不是標準 big5-eten 字集裡的字,
像是簡體的「區」或是(日文)簡體的「發」這種字,
(按:「區」是中間的「品」換成「ㄨ」的寫法,大陸跟日本都這樣寫)
不過雖然 big5-eten 不支援,但是之前顯示都可以很正常的顯示...
大概是因為我幾台電腦裡都有裝 Big5 補完計畫的關係,
所以這些不在 big5-eten 造字區裡面但是在 UTF-8 unicode 裡面的簡體漢字都被 map 到 Big5 的造字區裡了,
由於一開始不是很確定這些非 big5-eten 的字元在 UTF-8 下面是不是合法字元,
所以就先手動改了幾個(in Big5 console: Big5檔名->ASCII中介檔名;in UTF-8 console: ASCII中介檔名->UTF-8檔名),
確定可以用之後就乾脆全部都手動改把它改完了。(總數大約二十來個檔案)

改到一半的時候才想到說其實可以先把 ftp server 設定成 Big5 encoding ,
用 FileZilla 先抓到一台 x86 的繁體中文 Windows 上之後,
再把 ftp server 改回 UTF-8 encoding ,把檔案上傳回去。
這樣 codepage 轉換就交給 Windows 內部的轉碼程式去做,
這是確定不會有問題的。
(按: NT kernel 的 Windows file system 用的是 UTF-16 的 encoding ,
若讀檔程式不支援 Unicode 的話會自動將 UTF-16 轉換為該程式的 encoding ,
所以 ftp server(Big5)->Windows FS(utf-16)->ftp server(utf8) 是 transparent的)

由於我是在一號機上改的,改完之順手就用 FileZilla 看了一下改之後的檔案,
嚇!居然可以正確顯示了?!

本來通通是亂七八糟的亂碼的中文、日文檔名這回卻都正常顯示了,
(但是 raw directory listing 那邊反而變成亂碼了)
又手動建立幾個 Big5 encoding 的中文檔案做交叉測試之後,
發現問題應該是:

FileZilla 在 x64 環境╱英文 Windows + MUI 環境無法使用非 UTF-8 encoding

此時就算叫 FileZilla never UTF-8 ,
它還是會把 server 傳過來的 Big5 字元用 UTF-8 顯示(remote file listing),
然後在要對遠端進行操作(cd, get...etc.)的時候把這個「以 UTF-8 顯示的 Big5」當作正確的名稱進行操作...
也就是說,若現在是 Big5 connection , cd 的指令送回去的是 Big5 encoding 的「以 UTF-8 顯示的 Big5」亂碼檔名,
送回去的是 Big5 encoding 的亂碼,而這個東西在遠端根本就不存在,
自然 server 就會跟你說 error error error 了...

而 raw directory listing 則是很一貫的一直都用 Big5 顯示,
(不管在哪個平台、哪種設定上)
我想應該是 FileZilla team 裡面不同人在寫程式的時候用的 default codepage 不一樣的關係吧,
有些部分在加入 UTF-8 支援之後寫死成 UTF-8 only ,
有些地方寫成 Big5 only ,
有些地方則是按照系統 default 的 codepage 解碼...

該說,果然臭蟲是抓不完的嗎?
特別是社群開發的自由軟體 orz



UPDATE: 2006/12/13

[補記]

後來我上 FileZilla Forum 回報了這個問題,
Site Admin 建議我換成 FileZilla 3 beta 2 試試看,
一試之下,一點問題也沒有,
看起來他們是有意識到 FileZilla 2 的 multibyte 支援有些問題,
但是改起來太費工(?)所以就在下一個 release 才修正。
創作者介紹

囈語二三,,

origin2 發表在 痞客邦 PIXNET 留言(0) 人氣()