Android音乐播放器乱码


有哪些问题导致:

1、google mediaScanner 的缺陷
2、qcom MP3 PARSER的问题 (找QCOM)


Google不支持针对每个TAG ITEM 单独处理, 而是假设ID3 中所有的TAG类型都是一种编码格式


摘自百度百科:

ID3  V2 (一般是V2.3)
帧头的定义如下:
char FrameID[4]; /*用四个字符标识一个帧,说明其内容,稍后有常用的标识对照表*/
char Size[4]; /*帧内容的大小,不包括帧头,不得小于1*/
char Flags[2]; /*存放标志,只定义了6位,稍后详细解说*/
1.帧标识
用四个字符标识一个帧,说明一个帧的内容含义,常用的对照如下:
TIT2=标题 表示内容为这首歌的标题,下同
TPE1=作者
TALB=专集
TRCK=音轨 格式:N/M 其中N为专集中的第N首,M为专集中共M首,N和M为ASCII码表示的数字
TYER=年代 是用ASCII码表示的数字
TCON=类型 直接用字符串表示
COMM=备注 格式:"eng\0备注内容",其中eng表示备注所使用的自然语言

下面摘自:http://article.yeeyan.org/view/460289/398443

一般来说,一个字符串表示范围在$20-$FF的ISO-8859-1字符。这种字符串在帧描述中表示为,或者如果允许换行则为。所有Unicode字符串使用16位Unicode 2.0((ISO/IEC 10646-1:1993, UCS-2)。Unicode字符串必须以Unicode BOM($FF FF或$FE FF)开头来识别字节顺序。

所有数字字符串和URL必须编码为ISO-8859-1。如果编码为ISO-8859-1则必须以$00作为字符串的结束,如果编码为Unicode则为$00 00。一般来说,换行符是被禁止的。在ISO-8859-1中,如果允许换行则只能用$0A表示换行。

对于允许不同类型文字编码的帧,在其帧大小之后紧跟一个字符编码描述位。如果使用ISO-8859-1则该位应为$00,如果使用Unicode则应为$01。依赖于字符编码的字符串表示为,或者如果允许换行则表示为

对于NULL结尾的空Unicode字符串,在Unicode DOM之后跟随一个Unicode NULL($FF FE 00 00或$EF FF 00 00)。

三个字节的语言字段用户描述帧内容的语言,其参照ISO-639-2标准。



解决方案:

对每个TAG ITEM 单独测试码表,然后利用 ucnv_convertEx  将源编码格式转换为UTF-8格式

KK 的源码中有MediaScannerClient::convertValues,
这个函数循环处理了  mValues 这个数组。
很简单:  将这个函数改造成针对单个TAG item的函数。

然后改造 endFile, 针对单个ITAM处理即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值