解决Jedis数据读取乱码问题

现象

同一套代码,同一个数据源,不同的操作系统,在OSX上数据提取编码正常,而Ubuntu上拉取数据乱码,数据拉取代码如下。

@Override
public List<String> mget(String... fields) {
    List<byte[]> arrFields = new ArrayList<>();
    for (String field : fields) {
        arrFields.add(field.getBytes());
    }

    List<byte[]> results = redisTemplate.execute(
            (RedisCallback<List<byte[]>>) connection -> connection.mGet(arrFields.toArray(new byte[arrFields.size()][]))
    );
    if (results == null) {
        return new ArrayList<>();
    }
    final List<String> ret = new ArrayList<>();
    results.forEach(result -> {
        if (result != null) {
            try {
                ret.add(new String(result));
            } catch (UnsupportedEncodingException e) {
                ret.add(null);
            }
        } else {
            ret.add(null);
        }
    });
    return ret;
}

检查了Redis存储的数据都是UTF-8之后,怀疑是不同OS的编码有所不同,所以对提取的数据指定了编码格式,即new String(data, "UTF8");,解决了问题。

posted @ 2016-05-07 22:29  Srggggg  阅读(5284)  评论(0编辑  收藏  举报