現象
同一套代碼,同一個數據源,不同的操作系統,在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");
,解決了問題。