簡體   English   中英

SharedPreferences是否遇到“ ISO-8859-1”字符串的問題?

[英]SharedPreferences trouble with “ISO-8859-1” string?

我正在嘗試將少量二進制數據作為字符串寫入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文件中包含鍵值。

使用該編碼的共享首選項不能與字符串一起使用嗎?

謝謝

在第一行中,在不指定字符編碼的情況下調用了getBytes(),因此您要轉換為UTF8字節。 之所以有效,是因為您使用的是拉丁文1字符,但是如果您使用的是西里爾字母或希臘字母,則會崩潰。 無論如何,這有什么意義? 字符串以UTF16格式存儲在內存中

SharedPreferences可能會將字符串視為UTF-8編碼,而您給它提供的是ISO-8859-1編碼的字符串。 這兩種編碼不兼容,因此這可能就是您看到此問題的原因。

您必須使用ISO-8859-1編碼嗎? 您可以將編碼設置為UTF-8還是將其完全空白(我相信Java默認會將其存儲為UTF-16編碼的字節)? 通常,這是您可以選擇的更安全的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM