我正在使用socket.io-java-client将我正在监听的推文的 JSON 对象发送到我的 node.js 服务器。一段时间后,套接字断开连接,我收到此错误:
io.socket.SocketIOException: 1+0
at io.socket.IOConnection.transportMessage(IOConnection.java:725)
at io.socket.WebsocketTransport.onMessage(WebsocketTransport.java:117)
at de.roderick.weberknecht.WebSocketReceiver.run(WebSocketReceiver.java:57)
Aug 9, 2012 10:05:45 AM io.socket.IOConnection cleanup
INFO: Cleanup
该问题似乎是由某些带有问题字符的推文引起的。我的程序尝试发送的 JSON:
Aug 9, 2012 10:05:43 AM io.socket.IOConnection sendPlain
INFO: > 5:::{"args":[{"message":"#TBT #WatchTheThrone #Yeezy #JayZ #LA One of the most epic concerts of my life. ? http://t.co/6WVaZgIM","user":"ElleBxo"}],"name":"p5tweet"}
Aug 9, 2012 10:05:45 AM io.socket.IOConnection sendPlain
与推特上的实际推文相比:“#TBT #WatchTheThrone #Yeezy #JayZ #LA 我一生中最史诗般的音乐会之一。http: //instagr.am/p/OHXPQxxUe7/ ” https://twitter.com/ ElleBxo/状态/233610010066821121
我的 JSON 在 Instagram 链接前面看到的“?”似乎有一个奇怪的差异,而在 Twitter 上它只是“”。下面是我有问题的代码。我尝试在字符串上执行 replaceAll(),但它不能保证抛出和断开我的套接字的错误。我还看到其他字符导致此错误,所以我不确定它们都是什么。
Map<String,String> mp=new HashMap<String, String>();
Status tweet = (Status)queue.get(0);
String safeTweet = tweet.text().replaceAll(" ? ", " ");
mp.put("user",tweet.user().screenName());
mp.put("message",safeTweet);
JSONObject tweetJSON = new JSONObject(mp);
socket.emit("p5tweet", tweetJSON);
如何正确转义推文字符串以防止这种情况发生?谢谢!!:)
编辑:另一条断开连接的推文。似乎链接通常会导致它:
{"args":[{"message":"RT @Olympics: Congrats to the first woman ever to win an Olympic #Boxing gold medal - Nicola Adams of Team GBR #olympics http://t.co/Jab ...","user":"GlockQueen31"}],"name":"p5tweet"}
在推特上:“恭喜第一位获得奥运会拳击金牌的女性——GBR 队的尼古拉·亚当斯 #olympics pic.twitter.com/JabAjIrl”