E/System:忽略将 属性 "file.encoding" 设置为值 "ISO-8859-1" 的尝试
E/System: Ignoring attempt to set property "file.encoding" to value "ISO-8859-1"
当我在 Android Studio 中尝试此操作时,它忽略了编码,导致我的 program.But 出现灾难,当我在 java 中尝试此操作时,它没有任何问题。
System.setProperty("file.encoding","ISO-8859-1");
Field charset = Charset.class.getDeclaredField("defaultCharset");
charset.setAccessible(true);
charset.set(null,null);
在日志中显示:
E/System: Ignoring attempt to set property "file.encoding" to value "ISO-8859-1"
如果安装了 SecurityManager,可以阻止设置系统 属性。一个 Android 应用程序可以预期在沙箱中 运行 这意味着有一个 SecurityManager 可以限制您可以设置的系统属性(可能有一些但不要指望它)。
常规 Java 应用程序通常 运行 没有 SecurityManager,因此设置此 属性 有效。
通常不需要在 运行 期间设置 file.encoding。如果您的应用程序在 file.encoding
没有特定值的情况下中断,您很可能在代码中做错了,例如从 byte[]
创建 String
而不指定要使用的字符集,反之亦然。
简而言之:为了让您的应用程序正常工作,您需要更改您的应用程序,例如
byte[] myBytes = myString.getBytes();
String mynewString = new String(myBytes);
InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
到
byte[] myBytes = myString.getBytes("8859_1");
String mynewString = new String(myBytes, "8859_1");
InputStreamReader reader = new InputStreamReader(new FileInputStream(file), "8859_1");
哦还有更多:
Field charset = Charset.class.getDeclaredField("defaultCharset");
charset.setAccessible(true);
charset.set(null,null);
这真是一个 hack,你应该为此感到肮脏 ;-) 这并不能解决所有问题,例如当您执行 HTTP-requests 时,file.encoding
也用于决定应该使用什么字符集来编码 HTTP-request-header-values。其字符集值保存在不同 class 的不同成员中,与 JavaMail 等中的类似功能相同。更改 "internal" 成员中的 charset-values classes 很可能会破坏东西,所以不要那样做,正如我已经写过的那样,它应该是完全没有必要的。
当我在 Android Studio 中尝试此操作时,它忽略了编码,导致我的 program.But 出现灾难,当我在 java 中尝试此操作时,它没有任何问题。
System.setProperty("file.encoding","ISO-8859-1");
Field charset = Charset.class.getDeclaredField("defaultCharset");
charset.setAccessible(true);
charset.set(null,null);
在日志中显示:
E/System: Ignoring attempt to set property "file.encoding" to value "ISO-8859-1"
如果安装了 SecurityManager,可以阻止设置系统 属性。一个 Android 应用程序可以预期在沙箱中 运行 这意味着有一个 SecurityManager 可以限制您可以设置的系统属性(可能有一些但不要指望它)。
常规 Java 应用程序通常 运行 没有 SecurityManager,因此设置此 属性 有效。
通常不需要在 运行 期间设置 file.encoding。如果您的应用程序在 file.encoding
没有特定值的情况下中断,您很可能在代码中做错了,例如从 byte[]
创建 String
而不指定要使用的字符集,反之亦然。
简而言之:为了让您的应用程序正常工作,您需要更改您的应用程序,例如
byte[] myBytes = myString.getBytes();
String mynewString = new String(myBytes);
InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
到
byte[] myBytes = myString.getBytes("8859_1");
String mynewString = new String(myBytes, "8859_1");
InputStreamReader reader = new InputStreamReader(new FileInputStream(file), "8859_1");
哦还有更多:
Field charset = Charset.class.getDeclaredField("defaultCharset");
charset.setAccessible(true);
charset.set(null,null);
这真是一个 hack,你应该为此感到肮脏 ;-) 这并不能解决所有问题,例如当您执行 HTTP-requests 时,file.encoding
也用于决定应该使用什么字符集来编码 HTTP-request-header-values。其字符集值保存在不同 class 的不同成员中,与 JavaMail 等中的类似功能相同。更改 "internal" 成员中的 charset-values classes 很可能会破坏东西,所以不要那样做,正如我已经写过的那样,它应该是完全没有必要的。