You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio设置file.encoding为ISO-8859-1被忽略致程序异常求助

解决Android Studio中file.encoding=ISO-8859-1被系统忽略的问题

兄弟,我太懂你踩的这个坑了!在标准Java环境里改file.encoding明明顺顺利利,结果到了Android Studio里直接被系统无视,还蹦出E/System: Ignoring attempt to set property "file.encoding" to value "ISO-8859-1"这条日志,折腾得人够呛对吧?

为啥会出现这个问题?

本质原因是Android的ART/Dalvik虚拟机和标准JVM的设计不一样:Android为了系统稳定性和兼容性,直接锁定了file.encoding这个系统属性,不允许应用在运行时修改它。默认情况下Android的字符编码就是UTF-8,这个是硬规则,没法通过修改系统属性绕过去。

靠谱的解决方案

别跟系统硬刚,换下面这些方式解决:

  • 显式在IO操作中指定编码(最推荐)
    放弃全局修改file.encoding的想法,在需要用ISO-8859-1的地方直接指定编码,既安全又不会影响应用其他部分。比如:
    读文件/处理字节数组:

    // 读取文件时指定编码
    InputStreamReader reader = new InputStreamReader(new FileInputStream("target.txt"), StandardCharsets.ISO_8859_1);
    // 字节数组转字符串时指定编码
    String content = new String(byteData, StandardCharsets.ISO_8859_1);
    

    写文件同理:

    OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.txt"), StandardCharsets.ISO_8859_1);
    
  • 仅单元测试场景:通过Gradle配置JVM参数
    如果只是本地单元测试需要这个编码,可以在模块的build.gradle里加这段配置:

    test {
        jvmArgs "-Dfile.encoding=ISO-8859-1"
    }
    

    注意!这个只对本地跑的单元测试有效,真机/模拟器上的Instrumented测试依然没用,因为还是跑在ART虚拟机上。

  • 重构代码,避免依赖默认编码
    其实依赖file.encoding的代码本身就不太靠谱——不同环境默认编码可能不一样,很容易出兼容性问题。不管是Java还是Android,显式指定编码都是最佳实践,从根源上避免这类问题。

总的来说,Android就是不让你改这个系统属性,换显式指定编码的路子才是正确打开方式,既能解决问题又符合平台规范。

内容的提问来源于stack exchange,提问作者Sharanyo Chatterjee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:41:32