<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    老六曰
    曾經的小六
    在面內容來自ubuntu中文論壇:
         最近嘗試 Listen 和 Banshee 才發現,Rhythmbox 上出現的 mp3 亂碼問題依舊,而且更加嚴重,想要徹底弄清和解決必須搞清兩點,第一, mp3 標簽類型和編碼,第二,各種播放器對 mp3 標簽讀取情況,相信它們應該都有相關的開發文檔來說明,但我還是用了一個最笨的方法,就是一個一個的測試來得出結論,真理不是來自于實踐嗎?

    1、了解 mp3 標簽類型和使用的編碼

    首 先說 mp3 標簽類型和編碼,大家應該知道目前主要存在這幾種標準,ID3v1, ID3v2 2.3, ID3v2 2.4, APEv2,ID3v1 只支持 ISO-8859-1 編碼 (編碼集參考),嚴格的說它是不支持中文的 (并不代表它不能儲存中文信息,目前中文 mp3 的 ID3v1 標簽都使用這個字段來儲存 GBK/GB18030 編碼的中文信息),而第二版 (ID3v2) 支持的格式增加了 utf-16,直到 2.4 版才開始支持 uft-8,但 ID3v2 標準沒有統一標簽內容的編碼,例如 2.4 版的 ID3v2 你可以使用 ISO-8859-1 編碼,也可以使用 utf-16/uft-8 這種 Unicode 編碼格式。做得最好的是 APEv2,它不但有很好的擴展性,而且還把編碼格式統一為 utf-8,這樣一來只要支持 APEv2 讀取的播放器播放帶有 APEv2 標簽的 mp3 就不會存在亂碼問題。

    2、了解各種播放器對 mp3 標簽讀取情況

    接下來研究的就是各種播放器 對這幾種標準的標簽支持程度,測試的播放器有:gnome 自帶的 Rhythmbox 0.10.0, Listen 0.5, Banshee 0.12.1+dfsg-3, Quod Libet 0.24, Exaile! 0.2.8, GMPC 0.13.0, Audacious 1.2.2。

    測試的方法很簡單,用一個 mp3 文件,分別寫入不同類型的標簽 (排列組合下來共 20 多種),在 ID3v1 和 ID3v2 2.3/2.4 中分別使用不同的編碼寫入中文信息 (如 GBK 編碼),然后用這些播放器去讀取,得到其結果。從這次的測試結果來看,Rhythmbox 對各種 mp3 的標簽支持最好,這主要歸功于它支持 APEv2 標簽的讀取。而 Banshee 和剩下的播放器完全一樣,都不支持 APEv2 的讀取,這個就能很好的解釋為什么一些 mp3 在 Rhythmbox 上正常,在其他播放器上就會亂碼。原因是現在很多 mp3 為了兼容,都同時使用了 ID3v1 和 APEv2 標簽,Rhythmbox 讀取 ID3v1 一樣會亂碼,但它優先讀取了 APEv2 標簽,而 Banshee 這些播放器不支持 APEv2 就只能讀取 ID3v1,當然會亂碼了。

    他們的共同特點就是,所依賴的 libid3tag 庫完全按照 ID3 標準來讀取標簽內容。不管使用何種標準的標簽,只要是讀取以 Unicode 編碼的中文內容,肯定沒有問題,遇到 GBK/GB18030 編碼的中文內容時,還是把它當成 ISO-8859-1 編碼來讀取,不亂才怪。

    ps: Vista 上的 WMP 不支持 ID3v2 2.4 和 APEv2 標簽的讀取,但它很聰明不能讀取就用文件名代替,千千靜聽支持全系列標簽的讀取,但不支持以 ID3v2 2.4 標準的寫入,不知道即將發布的 5.0 有變化沒有。foobar2000 v0.9.4.3 支持全系列標簽的讀取,默認使用 ID3v2 2.4 ( utf-8 ) 寫入,不愧被譽為經典。

    3、解決辦法

    既然明白了亂碼的原因,就得找解決辦法,一種 辦法就像 Win 上的播放器一樣,可以根據本地的編碼方式來解碼,或使用一些其他轉碼機制,要不還可以選擇優先讀取順序。以上測試的播放器中除了 Audacious 外其他都不支自定義編碼讀取功能。另外一個解決辦法就是把 mp3 標簽轉換為 Unicode 編碼,這種方式既簡單又支持標準,推薦大家使用。如果像 Banshee 一樣支持顯示文件路徑也可以解決亂碼問題,但這不是根本之道。

    目前發現有 2 個工具可以把標簽轉換為 Unicode 編碼,而且都支持批量轉換。

    1) 一個是周楓用 java 編寫的 ID3iconv 0.2.1,最后更新時間為 2004/2/20。

    使用方法:
    java -jar ~/id3iconv-0.2.1.jar -e gbk *.mp3

    如果想轉換當前目錄下的所有 mp3 (包括子目錄):
    find . -iname "*.mp3" -execdir java -jar ~/id3iconv-0.2.1.jar -e gbk {} ";

    * 注意以上 ~/id3iconv-0.2.1.jar 位置根據自己情況而定
    * 相信現在大陸絕大多數能找到的 mp3 標簽都是以 GBK/GB18030 編碼,使用 -e gbk 來處理就夠了,當然你也可以使用 -e gb18030 來處理。
    * -e gbk 參數是代表把 GBK 編碼的標簽轉換為 Unicode 編碼,本身是 Unicode 編碼的就不轉換。如果需要轉換其他編碼的文件可以自行修改,如改為 Big5。
    * 經測試,轉換后為 2.3 版的 ID3v2,編碼格式為 uft-16

    2) 另外一個是用 Python 寫的 “Mutagen”,目前最新版本 1.11,Ubuntu 7.04 源里也帶有 1.10 版本的 Mutagen,可以用這個命令來安裝:
    sudo apt-get install python-mutagen

    ps:安裝 Quod Libet 和 Listen 都必須這個

    使用方法:
    mid3iconv -e gbk *.mp3

    如果想轉換當前目錄下的所有 mp3 (包括子目錄):
    find . -iname "*.mp3" -execdir mid3iconv -e gbk {} ";

    * 相信現在大陸絕大多數能找到的 mp3 標簽都是以 GBK/GB18030 編碼,使用 -e gbk 來處理就夠了,當然你也可以使用 -e gb18030 來處理。
    * -e gbk 參數是代表把 GBK 編碼的標簽轉換為 Unicode 編碼,本身是 Unicode 編碼的就不轉換。如果需要轉換其他編碼的文件可以自行修改,如改為 Big5。
    * 經測試,轉換后為 2.4 版的 ID3v2,編碼格式為 uft-16
    * 不過它會同時用 Unicode 編碼填滿 D3v1, ID3v2, APEv2 標簽,但是 ID3v1 又不支持中文的 Unicode 編碼,所以轉換后的 ID3v1 標簽全是問號。所以最好加上 –remove-v1 參數,轉換后刪除 ID3v1 標簽。
    mid3iconv -e gbk --remove-v1 *.mp3

    我的使用情況:
        我選擇使用第二種方法,網落安裝,快捷阿。呵呵,提醒使用的時候,
    find . -iname "*.mp3" -execdir mid3iconv -e gbk {} ";
    這個語句后面是有 ‘;’這個標點符號的。
    posted on 2007-10-27 13:47 死循環 閱讀(1429) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
     
    主站蜘蛛池模板: 亚洲av无码一区二区三区不卡 | 亚洲精品在线免费看| 久久久久亚洲AV成人网人人网站| 亚洲av无码日韩av无码网站冲| 亚洲小说区图片区另类春色| 亚洲精品美女在线观看播放| 人妻无码久久一区二区三区免费| 亚洲综合成人网在线观看| 亚洲AV成人无码网天堂| 国产三级免费观看| 精品多毛少妇人妻AV免费久久 | 四虎影院永久免费观看| 国产亚洲女在线线精品| 黄在线观看www免费看| 亚洲福利精品电影在线观看| 久久久久亚洲AV无码专区首| 日韩人妻无码精品久久免费一| 亚洲精品视频专区| 西西大胆无码视频免费| 777亚洲精品乱码久久久久久 | 亚洲春色另类小说| 成人免费看黄20分钟| 国产亚洲综合精品一区二区三区| 亚洲成av人片在线观看天堂无码| 美女无遮挡拍拍拍免费视频 | 亚洲gv白嫩小受在线观看| 99精品视频在线观看免费播放 | 亚洲精品无码久久久久| 国内成人精品亚洲日本语音| 久久久久噜噜噜亚洲熟女综合| 久久久久久成人毛片免费看| 亚洲综合中文字幕无线码| 1a级毛片免费观看| 亚洲精品无码久久久久秋霞| 日韩免费a级毛片无码a∨ | 日韩插啊免费视频在线观看| 精品亚洲AV无码一区二区三区| 免费在线观看的黄色网址| 久久久精品免费视频| 亚洲日韩精品射精日| 毛片a级毛片免费观看免下载|