首页 > 代码库 > Cursor扫描本地音乐文件,英文名也出现乱码,怎么解决。

Cursor扫描本地音乐文件,英文名也出现乱码,怎么解决。

问题描述
扫描本地音乐文件并放入List的代码如下:
public List<LocalMp3> getListByLocal() {
		Cursor cursor = getContentResolver().query(
				MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
				MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
		List<LocalMp3> localMp3s = new ArrayList<LocalMp3>();
		for (int i = 0; i < cursor.getCount(); i++) {
			LocalMp3 localMp3 = new LocalMp3();
			cursor.moveToNext();
			String title = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.TITLE));
			String artist = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.ARTIST));
			long duration = cursor.getLong(cursor
					.getColumnIndex(MediaStore.Audio.Media.DURATION));
			String mp3url = cursor.getString(cursor
					.getColumnIndex(MediaStore.Audio.Media.DATA));
			int isMusic = cursor.getInt(cursor
					.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); // 判断是否音乐
			if (isMusic != 0) {
				localMp3.setTitle(title);
				localMp3.setArtist(artist);
				localMp3.setDuration(duration);
				localMp3.setMp3url(mp3url);
				localMp3s.add(localMp3);
			}
		}
		return localMp3s;
	}

模拟器内的音乐文件只有一个,而且是文件名全英,如图:

在模拟器里测试生成列表,显示全部为问号的乱码,如图:

用真机来测试,有些是乱码,有些能正常显示(有些中文也能正常显示),如图:


请问应该怎么解决这个乱码问题,网上找的方法不管用,望各位大神出手相助了! 解决方案1
getListByLocal函数里最后需要执行cursor.close(),不然就可能出现乱码(这个和cursor内部的内存管理有关系)。 解决方案2
你用模拟器测试下,难道你的英文是全角的

Cursor扫描本地音乐文件,英文名也出现乱码,怎么解决。