现象
同一套代码,同一个数据源,不同的操作系统,在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");
,解决了问题。