免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: mci2004

[C] 单字节字符编码识别问题,windows-1251字符集识别问题 [复制链接]

论坛徽章:
0
发表于 2012-10-28 08:26 |显示全部楼层
另外在上层, 不是framework, 而是packages目录里面有写媒体库扫描的服务(MediaProvider), 那里面在扫描之前有locale设定. 代码文件是MediaScannerService.java.

LZ你贴的代码是MediaScannerService通过JNI调过来的中间层. 中间层我记得里面还有获取locale的一个操作(即, 你的mLocalEncoding是由MediaScannerService设定, 你这里的mLocalEncoding应该是根据MediaScannerService的设定而来). 所以可以试试是否可以通过改上层locale来搞定. 不然就是LZ你贴的代码需要改了.
MediaScannerService.java中设定locale的代码如下(还是2.2 froyo版本的. 这段代码我直接搜出来的, 手上没环境和源码, 因为我很久没碰Android了):
  1. private MediaScanner createMediaScanner() {

  2.     MediaScanner scanner = new MediaScanner(this);

  3.     Locale locale = getResources().getConfiguration().locale;

  4.     if (locale != null) {
  5.         String language = locale.getLanguage();
  6.         String country = locale.getCountry();
  7.         String localeString = null;

  8.         if (language != null) {
  9.             if (country != null) {
  10.                 scanner.setLocale(language + "_" + country);
  11.             } else {
  12.                 scanner.setLocale(language);
  13.             }
  14.         }
  15.     }
  16.     return scanner;
  17. }
复制代码

论坛徽章:
3
摩羯座
日期:2013-11-12 20:06:19午马
日期:2013-11-27 16:35:55双鱼座
日期:2014-04-04 19:02:30
发表于 2012-10-28 09:10 |显示全部楼层
回复 11# madaossan


        对,谢谢你的回复,我这边是android4.1,我这边看代码用的vim只用cscope索引了framework层的代码,所以在查找函数调用的时候忽略了app层,如你所说确实是app那边MediaProvider---》MediaScannerConnection----》Bind一个MediaScannerService,然后就走到了我所说的setLocale逻辑。
       事实上我贴的代码是MediaScannerCinet部分的应该是算是MediaScannerServier的worker吧,逻辑上的顺利我懒得看了。
   
       话说android这么大个开源项目,有些在其他人看来的‘BUG’再正常不过了。但是,做android手机那些客户提的逆天的bug真的挺让人蛋疼吧。瞎折腾,反馈这个bug的外国客户恨不得让我们的手机支持所有现存native字符集。以后,再也不做android了,遇到这样的客户真心伤不起。

论坛徽章:
3
摩羯座
日期:2013-11-12 20:06:19午马
日期:2013-11-27 16:35:55双鱼座
日期:2014-04-04 19:02:30
发表于 2012-10-29 13:10 |显示全部楼层
本帖最后由 mci2004 于 2013-05-25 23:13 编辑
starwing83 发表于 2012-10-28 03:57
回复 8# mci2004

序哥,
我不得不说,又被你说对了,ID3.cpp这个文件做了这件事。

吐槽下,android是要闹哪样啊?latin1就laitin1嘛,非写成ISO/IEC 8859,尼玛8859版本分了好几个不知道啊。然后android c++层,分别用String8和String16来代表utf-8和utf-16。搞的好像Java一样。


Ps:序哥,目前‘安好’。一片“欣欣向荣”,人们“安居乐业”的景象。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP