Rhythmbox中文乱码解决办法

2023-10-29

转自:http://hi.baidu.com/morgensonne/item/3470aef58747abde6325d2d9


今天在网络上找到了一个比较好的解决Rhythmbox中文乱码的问题的方法 

进入你的音乐文件夹执行如下代码: 
mid3iconv -e GBK *.mp3 
如果没有提示多试几次,
有可能系统会提示:

python-mutagen没有安装。 
sudo apt-get install python-mutagen 安装。

输入如上的命令,回车。等安装好程序之后,再回到你的音乐文件夹,
输入命令: mid3iconv -e GBK *.mp3 回车。
然后重新打开rhythmbox,OK! 所有mp3都能正常显示了。

mid3iconv 命令主要是将原来mp3音乐文件的ID3信息转换成了Unicode并用ID3v2的格式存回文件中。

----------------------------------------------------------------------------------------------

另外一个是用 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

-----------------------------------------------------------------------------------

Rhythmbox Music Player是ubuntu自带的一款音乐播放器,功能还算比较强大,使用也简单。唯一的缺点就是中文显示乱码,原因是由于编码不同所致。

在这里介绍一个解决方法,修改变量。

在终端输入:

1vi~/.profile

在最后加入下面内容:

12exportGST_ID3_TAG_ENCODING=GBK:UTF-8:GB18030exportGST_ID3V2_TAG_ENCODING=GBK:UTF-8:GB18030

保存退出。

1source~.profile

重启Rhythmbox把歌曲重新导入即可显示正确。此方法在Ubuntu 10.04可行,其他版本应该问题也不大。

----------------------------------------------------------

相信很多朋友在Linux里播放mp3的时候,不论使用何种mp3播放器,或多或少都会遇到mp3标签乱码的问题。我一般在遇到mp3标签显示乱码的时候 都是使用Ex Falso(Quod Libet自带的一个mp3标签编辑器)来编辑一下标签,使我的播放器Quod Libet能够正常识别mp3标签。遇到转换歌曲少的时候,这样做没有什么问题,但是很多刚从Windows转到Linux上来的朋友就头大了,很多在 Windows下显示正常的mp3标签在Linux下全都乱套了。

我们先来看看一些关于mp3的标签和编码的概念再来解决这个问题,大家就会比较清晰一些了。

mp3的标签类型和编码,现在主要存在这几种标准,ID3v1、ID3v2 2.3、ID3v2 2.4、APEv2。它们分别支持的编码为
ID3v1:只支持ISO--8859-1
ID3v2 2.3:ISO--8859-1、UTF-16
ID3v2 2.4:ISO--8859-1、UTF-16、UTF-8
APEv2:UTF-8
我们可以从上面的列表看出,mp3的标签类型和编码是多种多样,没有任何的规范可言的。ID3v1只支持ISO-8859-1这一种编码,它是不支持中文 的,所以一般来说只有ID3v1标签的mp3在Linux上基本上也都是乱码的命,而ID3v2 2.3支持的格式增加了UTF-16,直到ID3v2 2.4版才开始支持UTF-8,但是 ID3v2的两个版本标准并没有统一标签内容的编码。这里值得一提的是APEv2,它拥有最好的扩展性,它把编码格式统一为UTF-8,这样一来只要支持 APEv2读取的播放器播放带有APEv2标签的mp3就不会存在乱码问题。可惜的是现在在国内的网站上下载的mp3基本上都没有APEv2标签,而且 Linux下也没有几个播放器支持APEv2标签的读取。(目前Gnome里的Rhythmbox是支持APEv2标签读取的,包括Quod Libet都不可以。)

一首mp3的标签是可以包含多种类型的,当一首mp3同时含有ID3v1、ID3v2 2.3、ID3v2 2.4、APEv2这4种类型中两种以上的时候,播放器对mp3标签的读取顺序一般是由上往下的,APEv2(前提是播放器支持此编码的读 取)---ID3v2---ID3v1。所以有时候会出现同一文件Rhythmbox显示标签正常(读取APEv2标签),其他播放器不正常的情况(读取 了ID3的标签)。

接着我们说说在Linux系统里,为什么所有的mp3播放器都会有乱码的问题,这是因为这些mp3播放器都是依赖系统内的libid3tag库完全按照 ID3的标准来读取标签内容的。 它不论mp3是采取何种的标准的标签(ID3v1、ID3v2、APEv2),只要mp3的标签的内容是Unicode编码存储的,那么显示肯定是正常的 (ID3v1的ISO-8859-1严格说是不支持中文,但是并不是代表它不能存储中文)。如果遇到是以gbk、gb18030、big5等编码的中文内 容时,它还是会把它当成ISO-8859-1来读取,乱码就成了必然。

说了这么多,现在问题就变得简单了,似乎我们只需要把mp3标签里面用gbk、gb18030、big5等编码存储的中文内容修改为Unicode编码,那么基本上所有Linux下的播放器都能正常识别mp3标签了。

关于mp3编码的转换,这里介绍一个工具----Mutagen,假如你安装了Quod Libet,那么这个包已经安装上去了。如果没有,执行下列命令就可以了。
sudo apt-get install python-mutagen

工具的使用方法
mid3iconv -e gbk *.mp3 #转换当前目录的mp3文件
find . -iname "*.mp3" -execdir mid3iconv -e gbk {} \;   #转换当前目录下所有mp3文件(包括子目录)

因为现在在网上下载的mp3绝大多数采用的都是gbk/gb18030编码,-e gbk 参数是代表把gbk编码的标签转换为Unicode编码,假如mp3标签本身是Unicode编码的就不转换。如果需要转换其他编码的文件可以自行修改 gbk参数,比如改为gb18030、big5。转换后为的mp3标签类型为ID3v2 2.4,编码格式为UTF-16。 

到了这一步之后,在Linux下使用所有播放器估计都没有什么问题了。

下面我们回过头来看看,追溯一下根源,为什么这些mp3原来在Windows下用Media Player怎么都是显示正常的呢?难道是Linux不如Windows吗?其实这个道理很简单,Firefox同样也打不开很多IE轻松就能打开的页 面,能说明Firefox不如IE吗?知情的人一看就明白了。Windows为了它所谓的兼容性,完全无视规范,自定规则,貌似它的软件兼容性很好,其实 到头来,毁的还是用户,从众多的不符合W3C规范的网页和现在铺天盖地的mp3标签为gbk/gb18030编码就可见一斑(反正我现在从网上下载的 mp3在Linux下就没有看到几个能正常显示的)。

可以告诉大家的是,利用上面的方法转换编码之后,这些mp3在Windows的文件属性菜单和Media Player里都无法正常显示标签,将会全部变为"?"。因为mid3iconv命令在转换编码时默认它会用Unicode编码填满D3v1, ID3v2, APEv2标签(前提是文件本来就含有这些类型的标签),但是 ID3v1 又不支持中文的 Unicode 编码。而Media Player似乎只支持ID3v1的读取,当然你使用其他的支持ID3v2、APEv2类型读取的软件是没有问题的。

这里给大家推荐一个Windows下的mp3播放器---Foobar2000,在以前Windows的生涯中,我一直都是使用的这个播放 器,foobar2000支持全系列标签的读取,更值得称赞的是它默认使用ID3v2 2.4类型UTF-8编码的写入,完全解决了编码方面的问题。 

给出一个个人提供的最终解决方案。
1.系统环境完全就是Linux。
直接使用下面的这条命令,转换所有mp3文件,完全无视Windows下的使用体验。
mid3iconv -e gbk *.mp3 

当然了,如果你为了避免自己的mp3文件共享给Windows或者mp3的用户时,出现煞风景的"?",你可以添加一个--remove-v1这样一个参数来直接删除ID3v1标签,避免了文件属性和Media Player里出现"?"。
mid3iconv -e gbk *.mp3 --remove-v1


2.系统环境为Windows+Linux的双系统
推荐使用foobar2000播放器,对文件进行mp3标签的编辑,可以在foobar2000里选中所有mp3文件,进行文件标签重 写,foobar2000会把所有标签进行重写,使标签采用ID3v2 2.4类型UTF-8编码的写入,完全解决Windows和Linux下mp3文件的编码问题。这也是比较完美的解决办法。

foobar支持三种标签编码方式 :ID3V1  ID3V2   APEv2将mp3文件用这三种编码都进行转化的话  window
和linux都不会出现乱码或者 ?

foobar编辑标签的功能很强大  标签名字两边加%   比如流派  %genre%  就可以读出来值
不妨一试


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rhythmbox中文乱码解决办法 的相关文章

  • 如何从 swagger 文档生成静态 html 文件?

    我创建了一个 Swagger 文档yaml文件位于 api swagger swagger yaml 现在我想分享一个静态 HTML 文档及其定义 但它已在招摇项目 https github com swagger api swagger
  • 如何解决 STS 启动时出现“无法找到用于堆栈映射生成的 Asm”错误?

    我正在尝试使用Spring工具套件3 8 3在 Ubuntu 16 04 上 启动后我收到此错误 期间发生内部错误 初始化 Java 工具 详细消息 在 初始化 Java 工具 期间发生内部错误 无法 找到用于堆栈图生成的 Asm 寻找 a
  • “以下软件包将被更高优先级的频道取代”是什么意思?

    我正在尝试将 fuzzywuzzy 安装到 64 位 Linux 中的 Anaconda 发行版上 当我这样做时 它试图改变我的conda and conda env to conda forge渠道 如下 我通过以下方式在 anacond
  • pip 找不到满足要求的版本 django==2.2.1

    我刚刚将操作系统更改为 linux 并且想安装 django 但我无法安装最新版本的 django 我努力了 pip install django 但是它安装了 django 1 11 11 这不是我需要的 我还将我的 pip 升级到了 1
  • 使用 Windbg 调试 .NET 转储

    我对 NET 进程进行了转储 使用 ma 选项和 procdump exe 中的高 CPU 触发器 并且希望在正在运行的线程中查看有关我的代码正在执行的操作的线索 我明白了 procdump ma c 65 s 2 n 3 service
  • 对符号“pthread_key_delete@@GLIBC_2.2.5”的未定义引用

    我正在尝试在 Ubuntu 中创建一个文件 当我创建时 我不断收到此错误 usr bin ld gtest 1 7 0 libgtest a gtest all cc o undefined reference to symbol pthr
  • 通过 Python 与 Windows 控制台应用程序交互

    我在 Windows 上使用 python 2 5 我希望通过 Popen 与控制台进程交互 我目前有一小段代码 p Popen console app exe stdin PIPE stdout PIPE issue command 1
  • 串口读取未完成

    下面的函数用于在Linux下从串口读取数据 我在调试时可以读取完整的数据 但是当我启动程序时 读缓冲区似乎并不完整 我正确接收了一小部分数据 但缓冲区的其余部分完全正确zero 可能是什么问题呢 int8 t serial port ope
  • 如何像C99一样使用make和编译?

    我正在尝试使用 Makefile 编译 Linux 内核模块 obj m main o all make C lib modules shell uname r build M PWD modules clean make C lib mo
  • 如何告诉 CMake 将构建文件放在哪里?

    我想告诉 CMake 将文件和文件夹输出到不同的文件夹而不是当前文件夹 我在下面讨论的是 CMake 生成的文件 文件 CMakeCache txt 目录 CMakeFiles 文件 生成文件 目录 bin 文件 cmake install
  • 如何在 Linux 中制作一个将文件转换为大写的 x86 汇编程序?

    我找到了一个名为 ProgrammingGroundUp 1 0 booksize pdf 的 pdf 文件 其中一个项目是制作一个汇编程序 该程序接收文件并将其转换为大写 section data CONSTANTS system cal
  • 什么进程正在使用给定的文件?

    我的一个脚本遇到了问题 它似乎无法规律地写入自己的日志 并抛出错误 此文件正在被另一个进程使用 我知道有一些方法可以用 try excepts 来处理这个问题 但我想知道why这种情况正在发生 而不仅仅是掩盖它 根本不应该有任何其他东西访问
  • Windows Kernel32.BatteryLifePercent = 255

    我正在尝试构建一个 Java 应用程序 该应用程序读取笔记本电脑电池的状态 并在电池电量低时向用户发送通知 为了做到这一点 我将 jna 与 Kernel32 本机库一起使用 如该问题的第一个答案中所述 如何获取Windows系统中的剩余电
  • Python:导航到便携式设备目录 (Windows 7)

    我正在尝试解决我创建的一个问题 https stackoverflow com questions 21381652 python find record time of mp4 movie noredirect 1 comment3234
  • Microk8s 节点未准备好 - InvalidDiskCapacity

    microk8s的节点不想启动 Kube system Pod 处于挂起状态 kubectl describe nodes说是警告InvalidDiskCapacity 我的服务器有足够的资源 PODS NAMESPACE NAME REA
  • C:运行系统命令并获取输出? [复制]

    这个问题在这里已经有答案了 我想在 Linux 中运行一个命令并获取其输出内容的返回文本 但我do not想要将此文本打印到屏幕上 有没有比制作临时文件更优雅的方法 你想要 popen http linux die net man 3 po
  • 终端从包含空格的变量传递参数

    在终端中如何将包含空格的字符串作为参数传递 它实际上跳过了空格后面的部分 只取第一个单词 word soccer ball shell exec casperjs test js word word 那么我怎样才能转义空白它只运行这个命令
  • 主动\被动模式下 FTP 服务器的适当 iptables 规则

    我在 CentOS6 上安装了 ProFTPD 服务器 如果我使 ftp 本地主机 我可以正确连接 但如果我从外部尝试 我会收到消息 没有到主机的路由 但有一条到主机的路由 因为我是通过 SSH 连接的 我尝试添加以下 iptable 规则
  • 为什么 ls -l 中的“总计”加起来不等于列出的总文件大小? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么是total在输出中ls l打印为64并不是26078列出的所有文件的总数是多少 ls l test ls total 64 rw
  • 如何使用 sed 交换两行?

    有谁知道如何更换line a with line b and line b with line a使用 sed 编辑器在文本文件中 我可以看到如何用保留空间中的一行替换模式空间中的一行 即 Paco x or Paco g 但是如果我想采取

随机推荐

  • MIPI简介(一)——基础概念介绍

    MIPI全称Mobile Industry Processor Interface 即移动产业处理器接口 MIPI联盟在2003年由ARM Nokia ST TI等公司成立 成员包括手机设备制造商 半导体厂商 软件厂商 系统供应商 外围设备
  • 【记录】Git pull(拉取),push(上传)命令整理(详细)

    前言 博主最近在学习git命令 因为git是一个非常好用的分布式版本管理工具 功能比svn强大 与SVN不同点是Git去中心化 每一个分支都是一个中心 并且支持本地仓库存储 像如今很多大公司都用git做版本控制 话不多说 具体命令整理如下
  • 分享一个漂亮的ASP.NET MVC界面框架

    本文分享一个插件化的界面框架 该框架提供了用户 角色 权限管理功能 也提供了插件的管理和插件中心 下图是该界面框架的样式 全部源码和原理介绍下一篇分享 推荐越多 源码放的越早 呵呵 要使用该界面框架 你可以通过以下地址来下载到界面框架的Vi
  • Figma 笔记 常用快捷键

    画布 画框 gt 图层 gt 形状 快捷键 可在软件中查看快捷键信息 编辑快捷键 功能 L 切换到画线 Shift L 画箭头 O 切换到画圆 R 切换到画矩形 Shift X 填充 与 描边 切换 Ctrl Shift K 导入图片 支持
  • 删除排序数组中的重复项

    文章目录 删除排序数组中的重复项 一 暴力 时间复杂度O n 2 空间复杂度 O 1 二 优化 时间复杂度O n 空间复杂度O 1 删除排序数组中的重复项 给你一个 升序排列 的数组 nums 请你 原地 删除重复出现的元素 使每个元素 只
  • 软件工程中如何设计测试用例

    黑盒测试用例 将程序看做一个黑盒子 只知道输入输出 不知道内部代码 由此设计出测试用例 分为下面几类 等价类划分 把所有的数据按照某种特性进行归类 而后在每类的数据里选取一个即可 等价类测试用例的设计原则 设计一个新的测试用例 使其尽可能多
  • @Linux搭建LDAP认证服务

    文章目录 1 Ldap概述 2 Ldap的用途 3 Ldap的数据模型 1 数据模型叙述 2 目录树简述 3 Ldap目录树说明 2 搭建LDAP服务器 1 环境准备 2 Ldap服务搭建 3 Ldap Web UI安装 1 安装PHPLD
  • Git 推送本地分支至远程分支

    总结一 本地创建本地分支并切换 针对当前cas thymeleaf 创建一个cas 分支 Administrator PC 20180603XCNG MINGW64 d git workspace cas thymeleaf main gi
  • CSDN的常用技巧(字体、颜色、大小、类型、背景标记、删除、居中)

    CSDN的常用文本设置 字体 颜色 大小 类型等 一 字体设置 二 绘制表格 三 下划线 四 首行缩进 五 设置插入图片的大小 六 空格 七 黑点 八 背景标记 删除文本 九 文字居中 一 字体设置 CSDN Markdown编辑器对字体设
  • 前端 注册界面开发

    1 div的使用 我所理解的div标签类似于ps中的图层一样 当我需要在页面展示内容时候 只需要在图层中添加相关的信息 下面通过此界面的创建过程讲解有关div的使用 添加总体的div div style width 200px height
  • 【PythonWeb】Flask(微框架) + jinja2(模板)

    Hello world conda create n flaskvir python 3 8 conda activate flaskvir flaskvir PS C Users hp gt conda env list conda en
  • 【unity】VS没有代码补全问题

    1 运行Visual Studio Installer 安装插件 2 打开unity项目 进入Package Manager 安装插件 3 打开Preferences窗口 修改External Scripts Editor为你的vs编辑器
  • 非华为电脑与华为平板、手机(鸿蒙系统)之间实现多屏协同功能

    前言 电脑型号 联想拯救者r7000p 2020 平板 huawei matepad11 手机 荣耀v20 安装软件 华为电脑管家11 1 1 95 参考 文章教程 https www coolapk com feed 27435645 s
  • 有 1000 瓶药物,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的 药物,最少需要多少只小白鼠?

    天堂之鼠 文章目录 天堂之鼠 原题题目 某个面试题 有 1000 个一模一样的瓶子 其中有 999 瓶是普通的水 有一瓶是毒药 任何喝下毒药的生物都会在一星期之后死亡 现在 你只有 10 只小白鼠和一星期的时间 如何检验出哪个瓶子里有毒药
  • linux中;、&和&&、

    Linux 特殊字符用法 特殊字符 注意 shell 在执行某个命令的时候 会返回一个返回值 该返回值保存到 shell 变量 如果 0时 表示命令执行成功 如果 1时 有时可以认为非0的数 返回值在0 255 之间 表示命令执行失败 分号
  • 以太坊学习:第一天

    目录 区块链目前可以分为四类 公链 私链 联盟链以及侧链 公链 私链 权利掌握在少数人手里 联盟链 部分去中心化 侧链 拓展协议 参考资料 以太坊的组成部分 以太坊中的重要概念 以太坊的货币 以太坊的挖矿产出 以太坊区块收入 区块链相关网站
  • JavaScript——中断请求的几种方案

    1 Promise Promise有一个缺点是一旦创建无法取消 所以本质上Promise是无法被终止的 但是我们可以通过中断调用链或中断Promise来模拟请求的中断 中断调用链 中断调用链就是在某一个then catch执行之后 后续的链
  • 期货开户交易绝对相信自己

    但当有些人不再害怕时 他们倾向于轻率 冲动鲁莽 轻率的结果就是他们又开始害怕了 如果你害怕犯错 你的恐惧会让你对市场的理解产生错误 导致你犯错 你无法学到足够的知识以弥补恐惧造成的消极影响 你就不会客观 不会毫不犹豫地行动 换句话说 在持续
  • 乘积尾零 蓝桥杯

    题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 如下的 10 行数据 每行有 10 个整数 请你求出它们的乘积的末尾有多少个零 5650 4542 3554 473 946 4114 3871 9073 9
  • Rhythmbox中文乱码解决办法

    转自 http hi baidu com morgensonne item 3470aef58747abde6325d2d9 今天在网络上找到了一个比较好的解决Rhythmbox中文乱码的问题的方法 进入你的音乐文件夹执行如下代码 mid3