ZooKeeper 服务端中文乱码解决方案
事情是这样的:使用zookeeper监控A后端跟新的BGM列表,B后端同步数据.达到分布式的作用.然鹅..因为编码问题困扰了好久,最后总算是有了一个解决方案,这里做一下记录.
需求
A后端(win): "bgm\陈奕迅 - 倾城.mp3" =>
zookeeper(linux): "bgm\\陈奕迅 - 倾城.mp3" =>
B前端(win | linux): "bgm/%E9%99%88%E5%A5%95%E8%BF%85%20-%20%E5%80%BE%E5%9F%8E.mp3"
正题
方案一:Url直接编码
后端A:
String path = "urlPath"; path = new String(path.getBytes("UTF-8"),"GBK"));
后端B:
URLEncoder.encode(path.getBytes()),"UTF-8");
方案二: 用base64编码后再解码
后端A:
String path = "urlPath"; path = >>Base64.getUrlEncoder().encodeToString(path.getBytes>>("UTF-8"));
后端B:
String bgmPath = new >>String(Base64.getUrlDecoder().decode(map.get("path">>)));
最后:
如果URL中带有空格需要手动替换一下:
finalPath = finalPath.replaceAll("\\+", "%20");