我正在使用socket.io-java-client向我的node.js服务器发送我正在侦听的推文的JSON对象。一段时间后,套接字断开连接,我收到此错误:
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
VS。 Twitter上的实际推文:“#TBT #WatchTheThrone #Yeezy #JayZ #LA我生命中最具史诗般的音乐会之一。http://instagr.am/p/OHXPQxxUe7/”https://twitter.com/ElleBxo/status/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"}
在Twitter上: “祝贺有史以来第一位获得奥运会#Boxing金牌的女性 - GBR团队的Nicola Adams #olympics pic.twitter.com/JabAjIrl”
答案 0 :(得分:1)
看起来像Tweet Stream中的错误。第242行
reader = new BufferedReader(new InputStreamReader(stream))
这不考虑编码,并使用平台默认值。如果HTTP响应的编码与您的平台匹配,则可以正常,否则会破坏非ASCII字符。