1

我正在使用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”

4

1 回答 1

1

看起来像 Tweet Stream 中的错误。第 242 行

https://github.com/mccv/processing-tweet-stream/blob/master/src/main/scala/com/twitter/processing/TweetStream.scala

reader = new BufferedReader(new InputStreamReader(stream))

这不考虑编码,并使用平台默认值。如果 HTTP 响应的编码与您的平台匹配,则可以,否则它将破坏非 ASCII 字符。

于 2012-08-09T18:47:38.680 回答