解决“对于常量池来说, 字符串 "..." 的 UTF8 表示过长”以及读取properties中文乱码的问题

  1. 用IDEA写程序时碰到了一个问题,读取写在常量类中的一个字符串时发生了错误
Error:(6, 8) java: 对于常量池来说, 字符串 "{"actualCapital":"",..." 的 UTF8 表示过长

网上查了一下,是这个字符串的大小超过了65535个字节,也就是64K。的确,我的这个字符串长度大概是94K,超过了64K。
2. 解决方法:把这个字符串从常量类中挪到properties文件中。
* 在resource下面新加一个json.properties文件,然后把大字符串写到这个文件中

json=[大字符串]
  1. 但是这又引出了另外一个问题:中文字符在properties文件中读取出来后变成了乱码,网上找了很多方法,设置编码解码格式等,也没有解决。后来终于找到了解决方法,就是把字符串粘贴进properties文件中前,先进行ASCII–>NATIVE转码,转码完成后写进去,再从里面读出来,中文就正常了。转码有很多工具,这里贴一个网站:
http://tool.chinaz.com/tools/native_ascii.aspx

勾选“不转换字母和数字”,点击ASCII转NATIVE按钮即可
4. 同时附上一个简单的从properties中读取数据的方法

/**
 * 从指定的配置文件里面根据指定的key读取value
 * @param propertiesPath 配置文件地址
 * @param key            key值
 * @param defaultValue   如果该key没有找到,则返回的默认值
 * @return value值
 */
public static String readFromProperties(String propertiesPath, String key, String defaultValue) {

    try {
        Properties properties = new Properties();
        InputStream in = GraphresysServiceImpl.class.getResourceAsStream(propertiesPath);
        properties.load(in);
        in.close();
        if (properties.containsKey(key)) {
            return properties.getProperty(key);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return defaultValue;

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值