Android “共享引用”的问题;ISO-8859-1“;一串

Android “共享引用”的问题;ISO-8859-1“;一串,android,sharedpreferences,Android,Sharedpreferences,我正在尝试将一小段二进制数据作为字符串写入SharedReferences。我可能对这里的编码有很大的误解,但这就是我要做的: 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);

我正在尝试将一小段二进制数据作为字符串写入SharedReferences。我可能对这里的编码有很大的误解,但这就是我要做的:

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文件中包含键值

共享pref不能使用该编码处理字符串吗

谢谢

在第一行中,调用getBytes()时没有指定字符编码,因此您正在转换为UTF8字节。它之所以有效,是因为您使用的是拉丁字母1,但如果您使用的是西里尔语或希腊语,它将崩溃。
这到底有什么意义?字符串作为UTF16存储在内存中

SharedReferences可能将字符串视为UTF-8编码的字符串,您将为其提供ISO-8859-1编码的字符串。这两种编码不兼容,所以这可能就是您看到此问题的原因


您必须使用ISO-8859-1编码吗?您可以将编码设置为UTF-8还是将其完全保留为空(我相信Java默认情况下会将其存储为UTF-16编码字节)?如果可以的话,这通常是一个更安全的选择。

SharedReference
默认情况下是使用
UTF-8
编码生成的,据我所知,这不起作用。不是说没有办法,但我不知道有办法。