Tuesday, October 31, 2006

(XBMC) 關於繁中檔名和字幕的基本認知

好久沒更新了,說來還真不好意思,實在也是想不出什麼新的題材好談。前幾天才又有朋友留言,詢問繁中字幕無法顯示的問題,我想就乾脆就我所知的,談一下XBMC繁中化後,應該要有的一些概念;當然,我所知的不見得是標準答案。

首先,XBMC自2006三月左右起,將介面逐步改為UTF-8顯示,後又加入了字幕支援,所以現階段的XBMC,在中文化方面可說是非常全面--只要你知道如何去應用,以及知道有哪些限制。

目前一般使用者最容易感到困惑的,就是不知道中文化後的限制,因此有時會以訛傳訛,說XBMC繁中問題重重,或根本無法使用。分析起來,一般以XBMC觀看影音檔案,不外乎是透過網路分享、將檔案燒至DVD光碟,和利用FTP傳到XBOX硬碟。燒至DVD光碟,這部分我今年三月就做過不少測試,最後確定中文的支援已不成問題(我不知道後來有沒有重新出現問題,但好像沒有朋友反映過)。

而網路分享,建議使用smb,這部分若你PC系統是XP,你在XP裡取什麼檔名,建什麼資料夾,透過smb分享後,從XBMC上看到的也會是完全相同的東西(因為xp的檔案命名支援unicode,XBMC 將unicode轉成UTF8再轉成UTF16,不會有任何困難)。

再來就是上傳至XBOX硬碟的問題了。XBOX硬碟是採FATX,屬於改進的FAT,其對檔案的大小、檔名的長短和格式都有限制。所以要上傳中文檔案至XBOX上時,請先確定「系統設定」-->「網路」-->「伺服器」-->「-FTP伺服器限定工作在FATX格式」這個設定是關閉的。而FAT的硬碟,就我所知,其檔案和資料夾的命名不支援unicode,所以要看到中文檔名,你「系統設定」-->「區域」-->「編碼」,選擇的必須是「Chinese Traditional (Big5)」(「Hong Kong Big5-HKSCS」也行)。

而由於該顯示是要從Big5轉成UTF8,這裡就會發生一點小問題。如我9月14日的網誌上所言:「XBMC 目前採用的轉碼字庫(character set conversion library),是公開源碼的GNU Libiconv,版本是1.9.1,這個原始碼在XBMC原始碼裡就有附(libiconv-1.9.1.rar)。這個版本已經蠻舊了,之前曾說過的各種有問題的字,像是碁、銹、裏、墻、恒、粧、嫺等擴充字,或像「酶」這種少用字,此版的big5裡都會有問題。我查了一下比較新的1.9.2版,big5字庫仍是沒變,要到現在仍在測試 中的1.11版,才加入了像big5 2003字庫。」

所以,檔案的名稱若用到了一些罕用字,或擴充字,或符號,或日文,或簡體中文,在轉碼時就會有問題(因該字的Big5碼並不存在於1.9.1的libiconv裡),結果就是整個檔名變成亂碼。

在此先做一個小結。檔案及資料夾的顯示,你XBMC採用的字型,若是多語言的,那透過smb連到PC,不論你XBMC設定的編碼為何,在XBMC中都可以顯示檔名(無論是哪一國的字,因為是從unicode轉的)。而若要顯示XBOX硬碟的中文檔名,則必須得在編碼設為big5的環境下。

再來談的還是XBOX硬碟的檔案問題。檔案傳到XBOX硬碟,都是透過FTP傳送,XBMC的FTP伺服器採用的是Filezilla。於是,我們就得面對在FTP的中文世界裡,那個大名鼎鼎的人物:許蓋功,此君是Big5傳輸的全民公敵。

詳細的情形我就不說了(我也是翻google才知道的),大概就是Big5開發的時間很早,在編碼時一不小心,占用到了某些重要的符號,在程式編寫或網路傳輸時,那些含有特定符號的字就會產生辨認上的問題。而以下是網路上整理出的兩組常用字,一組是big5的第二個byte用到了5C("\"符號,「許蓋功」就是5C成員);另一組則是用到了7C("|"符號),檔案或目錄名稱有這些字的話,就無法傳到xbox裡。

ASCII(5C) == “\”
AE5C娉 B85C稞 C25C擺 A55C功
AF5C珮 B95C鈾 C35C黠 A65C吒 B05C豹
BA5C暝 C45C孀 A75C吭 B15C崤 BB5C蓋
C55C髏 A85C沔 B25C淚 BC5C墦 C65C躡
A95C坼 B35C許 BD5C穀 AA5C歿 B45C廄
BE5C閱 AB5C俞 B55C琵 BF5C璞 AC5C枯
B65C跚 C05C餐 AD5C苒 B75C愧 C15C縷

ASCII(7C) == “|”
AA7C泜 B47C揉 A87C育 BE7C魯 B27C琍
BC7C慝 C67C鸛 A97C尚 B37C逖 BD7C罵
A77C坑 B17C悴 BB7C誡 C57C疊 A67C帆
B07C院 BA7C漏 C47C辮 AB7C咽 B57C稅
BF7C糕 AC7C洱 B67C閏 C07C嚐 AD7C迢
B77C會 C17C舉 A47C弋 AE7C徑 B87C腮
C27C甕 A57C四 AF7C砝 B97C頌 C37C牘

詳細的字如下:
ASCII(5C) == “\”
﹏兝α么功吒吭沔坼歿俞
枯苒娉珮豹崤淚許廄琵跚
愧稞鈾暝蓋墦穀閱璞餐縷
擺黠孀髏躡尐佢汻岤狖
垥柦胐娖涂罡偅惝牾莍傜
揊焮茻鄃幋滜綅赨塿槙箤
踊嫹潿蔌醆嬞獦螏餤燡螰
駹礒鎪瀙酀瀵騱酅贕鱋鱭

ASCII(7C) == “|”
﹄└ㄍ弋四帆坑育尚泜咽
洱迢徑砝院悴琍逖揉稅閏
會腮頌漏誡慝罵魯糕嚐
舉甕牘辮疊鸛戉吜芎
怙矹峗洀苶恝烡茦唰掤痎
虖圌斮琰萆隇搉煟腶輋
嫟漒翣銔憰獡蔙鋧懁瞣褟
鮐瞲觲鴱聵鞫矱霬礨鶘驂
驏鼶鸓

FTP的傳輸問題,只有伺服器端和客戶端都同時用UTF8才能解決,Filezilla好像已有支援UTF8的版本出現,但還不是很穩定。XBOX裡能不能使用,也是一個問題吧。

寫到這裡我突發奇想,因為上述的問題在於無法傳輸,或傳輸後成了亂碼,但XBMC本身有支援rar和zip等壓縮檔,那我把檔名有問題的檔壓成rar,改成正常的名字上傳,再用XBMC解開後執行或儲存,這不就好了嗎?

我找了一個許蓋功旗下的成員,名叫「不讓你看到我的淚.mp3」(「淚」是5C幫的),上傳XBOX,當然失敗。壓成mp3.rar,上傳……成功!從XBMC「我的音樂」去瀏覽檔案,rar檔就好比一個資料夾,點進mp3.rar後,果然看到裡面的檔:「不讓你看到我的淚.mp3」,Yes!我不得不佩服我的聰明才智,看來問題是解決了。

執行看看呢……呃,怎麼沒有反應?不死心,到「檔案總管」去,想用複製功能把檔案複製出來,結果也是失敗……

還是不死心。改壓成zip檔,重複以上動作。這次好一點點,直接執行,會有進度對話視窗不停地跑,跑到第7次時,檔案終於可以播出了!但想要複製,仍是失敗。

整個實驗計劃還是算失敗。猜想,或許XBMC之下仍是以Filezilla來處理檔案的複製、移動,在壓縮檔裡的檔,要先複製到暫存資料夾後才執行,於是就在這個時候出了問題。但為何zip檔就勉強可以播呢?或這是XBMC的rar解壓功能有問題?唉,以後有空再研究吧!

檔案部分就談到這。以下談字幕。

有了上面的概念後,字幕的問題就好解釋了。我們一般的字幕檔,多是儲存成ansi格式,播出時選擇Big5編碼,看起來好像一直沒什麼問題。

其實,因為轉碼字庫的關係,有些問題早就存在,只是我們通常不會在意,因為有問題的字,多是冷僻的罕用字,當有不相容的字元出現時,XBMC由於無法轉碼,就以英文碼的原味送出,我們就會看到一整行都是希奇古怪的火星文,然而正當我們感到疑惑時,下一段字幕出來,一切恢復正常,所以就以為剛才只是一時的秀斗,繼續看我們的片子。

我個人第一次注意到這個問題,是因為「裏」這個字。「裏」其實是「裡」的另一種寫法(把「里」從「裏」的中間搬出來放在右邊,就成了衣字旁的「裡」了),記得小時候國語課時教的,都是「裏」,但後來好像逐漸統一,改以「裡」為正統。通常只要一個人習慣用「裏」,他全部都會打成「裏」,而「這裡」、「那裡」這些詞,在字幕裡又十分常見,因此看片時,亂碼的問題才突顯出來。

這個潛在的問題,由於不嚴重,所以被我忽視了很久(看到有亂碼時,打開字幕檔,用取代功能把「裏」改成「裡」,問題就解決了)。但從今年大概五、六月時,XBMC做了一點修正,在播出字幕時,會先自動偵測字幕的編碼(請參見我9月10日的網誌),而若該字幕檔裡有XBMC不認得的字元時,XBMC就不會去播出那個字幕檔。所以,這個轉碼字庫的問題,就成了一個不得不去解決的問題。

經過試驗,上述的幾個包含「裏」的擴充字,在香港的「Hong Kong Big5-HKSCS」編碼裡是存在的,所以一般來說,編碼選擇Big5-HKSCS,相容程度會比單純的Big5好。而我個人,則是改採Unicode補完計畫的Big5字庫,使得我的XBMC的中文相容程度大幅提升,解決了上述除了「許蓋功」FTP以外的中文相容問題,而且還讓Big5之下可以顯示日文、簡體中文,以及許多unicode裡的符號。

如果你沒有我的補完計畫,遇到不能播的字幕時,先改選Big5-HKSCS,多數問題應可迎刃而解。若還不行,將整個字幕檔改存成UTF8格式,這樣就萬事OK。

大家所遭遇到的繁中問題,大概就這樣了吧。