如题!OSD显示的也是乱码。(kaffeine-xine)
搜索了本网站上所有文章,还没找到解决办法。 网站上的文章多数是说字幕的问题,可是我装上就没碰到这个问题
显示的MP3等文件名都是乱码,这个问题我搞了很久都没搞定。看过.XINE下的配置文件,也摸不着北。
哪位大侠给分析分析,给个解决问题的方向。
[问题]kaffeine播放的文件名显示乱码
-
- 帖子: 22
- 注册时间: 2007-05-21 18:42
-
- 帖子: 1074
- 注册时间: 2006-01-18 15:01
-
- 帖子: 22
- 注册时间: 2007-05-21 18:42
- nihui
- 帖子: 1746
- 注册时间: 2006-10-21 12:03
- 来自: Shanghai
- 联系:
Magic Linux 的 kaffeine 标题乱码修复补丁: 8) 8) 8) 8)
代码: 全选
diff -u -r kaffeine-0.8.2.orig/kaffeine/src/input/audiobrowser/playlist.cpp kaffeine-0.8.2/kaffeine/src/input/audiobrowser/playlist.cpp
--- kaffeine-0.8.2.orig/kaffeine/src/input/audiobrowser/playlist.cpp 2006-09-09 09:29:55.000000000 +0800
+++ kaffeine-0.8.2/kaffeine/src/input/audiobrowser/playlist.cpp 2006-09-12 08:55:50.000000000 +0800
@@ -1468,6 +1468,7 @@
QString title;
QString artist;
QString album;
+ QString ext;
QTextCodec *altCodec;
QTextCodec *CodecUtf8;
@@ -1476,6 +1477,9 @@
CodecUtf8 = QTextCodec::codecForName("UTF-8");
//kdDebug() << "playlist: locale " << Codec->name << " index: " << m_alternateEncoding << endl;
+ ext = mrl.kurl().fileName();
+ ext = ext.remove(0 , ext.findRev('.') +1).lower();
+
for (m = 0; m < groups.count(); m++)
{
//kdDebug() << "Metainfo-Group: " << groups[m] << endl;
@@ -1491,7 +1495,10 @@
if (keys[n] == "Title")
{
- title = metaGroup.item(keys[n]).value().toString().simplifyWhiteSpace();
+ if (ext=="wma" || ext=="wmv" || ext=="asf" || ext=="rm" || ext=="rmvb" || ext=="rmm" || ext=="ra")
+ title=mrl.kurl().fileName();
+ else
+ title = metaGroup.item(keys[n]).value().toString().simplifyWhiteSpace();
if ((!title.isEmpty()) && (title.contains(QRegExp("\\w")) > 2) && (title.left(5).lower() != "track"))
{
if ((m_useAlternateEncoding) && (CodecUtf8->heuristicContentMatch(title.ascii(), title.length()) < 0))
@@ -1509,7 +1516,10 @@
if (keys[n] == "Artist")
{
- artist = (metaGroup.item(keys[n]).value().toString().simplifyWhiteSpace());
+ if (ext=="wma" || ext=="wmv" || ext=="asf" || ext=="rm" || ext=="rmvb" || ext=="rmm" || ext=="ra")
+ artist="";
+ else
+ artist = (metaGroup.item(keys[n]).value().toString().simplifyWhiteSpace());
if (!artist.isEmpty())
{
if ((m_useAlternateEncoding) && (CodecUtf8->heuristicContentMatch(artist.ascii(),artist.length()) < 0 ))
@@ -1525,7 +1535,10 @@
if (keys[n] == "Album")
{
- album = (metaGroup.item(keys[n]).value().toString().simplifyWhiteSpace());
+ if (ext=="wma" || ext=="wmv" || ext=="asf" || ext=="rm" || ext=="rmvb" || ext=="rmm" || ext=="ra")
+ album="";
+ else
+ album = (metaGroup.item(keys[n]).value().toString().simplifyWhiteSpace());
if (!album.isEmpty())
{
if ((m_useAlternateEncoding) && (CodecUtf8->heuristicContentMatch(album.ascii(),album.length()) < 0 ))
diff -u -r kaffeine-0.8.2.orig/kaffeine/src/player-parts/xine-part/xine_part.cpp kaffeine-0.8.2/kaffeine/src/player-parts/xine-part/xine_part.cpp
--- kaffeine-0.8.2.orig/kaffeine/src/player-parts/xine-part/xine_part.cpp 2006-09-09 09:29:57.000000000 +0800
+++ kaffeine-0.8.2/kaffeine/src/player-parts/xine-part/xine_part.cpp 2006-09-12 08:53:52.000000000 +0800
@@ -1020,6 +1020,7 @@
void XinePart::slotTrackPlaying()
{
QString caption;
+ QString ext;
kdDebug() << "XinePart: xine is playing" << endl;
m_pauseButton->setChecked(false);
@@ -1038,13 +1039,16 @@
if (mrl.length().isNull()) /* no meta */
{
+ ext = mrl.kurl().fileName();
+ ext = ext.remove(0 , ext.findRev('.') +1).lower();
if ((!m_xine->getTitle().isEmpty()) && (!m_xine->getTitle().contains('/'))
&& (m_xine->getTitle().contains(QRegExp("\\w")) > 2) && (m_xine->getTitle().left(5).lower() != "track"))
- mrl.setTitle(m_xine->getTitle());
+ if (ext!="wma" && ext!="wmv" && ext!="asf" && ext!="rm" && ext!="rmvb" && ext!="rmm" && ext!="ra") mrl.setTitle(m_xine->getTitle());
if ((mrl.artist().isEmpty()) && (!m_xine->getArtist().isEmpty()))
- mrl.setArtist(m_xine->getArtist());
+ if (ext!="wma" && ext!="wmv" && ext!="asf" && ext!="rm" && ext!="rmvb" && ext!="rmm" && ext!="ra") mrl.setArtist(m_xine->getArtist());
if ((mrl.album().isEmpty()) && (!m_xine->getAlbum().isEmpty()))
- mrl.setAlbum(m_xine->getAlbum());
+ if (ext!="wma" && ext!="wmv" && ext!="asf" && ext!="rm" && ext!="rmvb" && ext!="rmm" && ext!="ra")
+ mrl.setAlbum(m_xine->getAlbum());
if ((mrl.year().isEmpty()) && (!m_xine->getYear().isEmpty()))
mrl.setYear(m_xine->getYear());
if ((mrl.genre().isEmpty()) && (!m_xine->getGenre().isEmpty()))
- nihui
- 帖子: 1746
- 注册时间: 2006-10-21 12:03
- 来自: Shanghai
- 联系:
嗯,还有一个 kaffeine-OSD-fonts 的补丁,不过这些补丁必须 rebuild 才能用。。
代码: 全选
diff -u -r kaffeine-0.8.3.orig/kaffeine/src/player-parts/xine-part/kxinewidget.cpp kaffeine-0.8.3/kaffeine/src/player-parts/xine-part/kxinewidget.cpp
--- kaffeine-0.8.3.orig/kaffeine/src/player-parts/xine-part/kxinewidget.cpp 2006-11-27 03:12:24.000000000 +0800
+++ kaffeine-0.8.3/kaffeine/src/player-parts/xine-part/kxinewidget.cpp 2007-01-01 10:33:08.000000000 +0800
@@ -1182,7 +1182,7 @@
NULL, 10, &KXineWidget::sizeForOSDMessagesChangedCallback, this);
m_osdFontInfo = strdup(i18n("Font for OSD Messages").local8Bit());
- m_osdFont = strdup((char*)xine_config_register_string(m_xineEngine, "osd.osd_font", "sans", m_osdFontInfo,
+ m_osdFont = strdup((char*)xine_config_register_string(m_xineEngine, "osd.osd_font", "heiti", m_osdFontInfo,
NULL, 10, &KXineWidget::fontForOSDMessagesChangedCallback, this));
/* init video driver */