轉貼:ubuntu Rhythmbox歌曲名亂碼問題

ubuntu存在好多亂碼問題,幸好網上高人無數,對這些問題還都有解決之道。
先說最簡單的解決辦法吧!
sudo apt-get install python-mutagen 安裝上這個東西
而後跳入到存放音樂文件的目錄下,輸入指令mid3iconv -e gbk *.mp3便可。通常音樂都是gbk編碼,而後會轉化爲utf-8吧!我試了試,果真頗有效。
如下是網上轉的相關細節
一、瞭解 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 就不會存在亂碼問題。

二、瞭解各類播放器對 mp3 標籤讀取狀況

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

測試的方法很簡單,用一個 mp3 文件,分別寫入不一樣類型的標籤 (排列組合下來共 20 多種),在 ID3v1 和 ID3v22.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 )寫入,不愧被譽爲經典

三、解決辦法

既然明白了亂碼的緣由,就得找解決辦法,一種辦法就像 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 *.mp
java

相關文章
相關標籤/搜索