android – SharedPreferences问题与“ISO-8859-1”字符串?

我正在尝试将一小部分二进制数据作为字符串写入SharedPreferences.我可能在这里严重误解编码,但这正是我想要做的:

String str = new String("hi there!".getBytes(), "ISO-8859-1");

SharedPreferences p = context.getSharedPreferences("foo", MODE_PRIVATE);
Editor e = p.edit();
e.putString("string", str);
e.putBoolean("worked", true);
e.commit();

... later on after an app restart...

// the shared prefs file will be empty upon the next app start:
SharedPreferences p = context.getSharedPreferences("foo", MODE_PRIVATE);
Log.d(TAG, "String value present?: " + p.getString("string", null)); 
Log.d(TAG, "Boolean flag present?: " + p.getBoolean("worked", false));

commit()调用返回true,一切似乎都正常.下次我启动这个演示应用程序时,我读取了这个共享prefs实例的内容,它完全是空的.如果我不使用“ISO-8859-1”编码,那么一切都按预期工作,共享的prefs文件中包含键值.

共享首选项是否可以使用该编码的字符串?

谢谢

最佳答案 SharedPreferences可能将字符串视为UTF-8编码,并且您正在为其提供ISO-8859-1编码的字符串.这两种编码不兼容,所以这可能就是你看到这个问题的原因.

你必须使用ISO-8859-1编码吗?您可以将编码设置为UTF-8或将其完全留空(我相信Java会默认将其存储为UTF-16编码的字节)吗?这通常是您可以选择使用的更安全的选择.

点赞