解決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");,解決了問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM