2017-08-29 256 views
0

我打電話到Instagram的API這樣的JSONObject序列化表情符號

URL url = new URL("https://api.instagram.com/v1/tags/tagToBeSearched/media/recent?access_token=MyToken"); 
URLConnection conection= url.openConnection(); 
conection.connect(); 
BufferedReader bin = new BufferedReader(new InputStreamReader(conection.getInputStream(), "UTF-8")); 
String line = bin.readLine(); 

line變量包含Instagram的API爲String響應。在調試時,我發現一些特殊字符的格式如下:\u00f3

當我序列應對JSONObject,像JSONObject obj = new JSONObject(line);,特殊字符改變,在這種情況下,\u00f3將轉換爲ó。但是對於一些表情符號,轉換並不總是預期的表情符號,就像這個\uD83D\uDE03,笑臉符號()的等價物變成了ߘ。

我也使用emoji-java操縱表情符號,它支持使用\ud83d\ude4c格式,所以我能夠使用parseToAliases獲得表情符號的別名,就像這樣:EmojiParser.parseToAliases("\ud83d\ude4c");給出:raised_hands:,表情符號。但是如果我在JSONObject解析後使用這個,表情符號會變成ߘ,我無法通過EmojiParser.parseToAliases方法獲得任何信息。

我正在使用Eclipse IDE並在調試時在表達式窗口中查看結果,這是因爲IDE無法顯示錶情符號並且值仍然正確嗎?或者與JSONObject解析有關?或者在構造函數InputStreamReader中使用UTF-8?我想保留\u00f3格式並繼續使用emoji-java。

編輯:好,我測試調用EmojiParser.parseToAliases()傳遞JSONObject響應,結果是預期的格式,:raised_hands:。我想我是直接傳遞ߘ(複製和表達的窗口粘貼)在EmojiParser.parseToAliases(),這樣做返回相同的輸入:ߘ

+0

這很可能是顯示問題而非其他問題。你應該嘗試編寫一個[MCVE]來驗證這一點(並且在你的問題中還包括你的環境的細節 - java版本,庫,版本庫等)。你可以嘗試的一件簡單的事情就是從字符串文本中將表情符號打印到表達式窗口中,並查看發生了什麼。 – pvg

+0

好的,在這裏做了一個新的測試,調用'EmojiParser.parseToAliases()'直接在代碼中傳遞emojis,它以':raised_hands:'格式返回。它很可能是不能顯示這些表情符號的IDE –

回答

0

當調試Java的表情符號,是顯示不正確,但數值仍然是正確的:請參閱Eclipse bug 407857

+0

是的,我做了一些測試,將'JSONObject' direclty的值傳遞給'EmojiParser.parseToAliases()',並收到了期望的值。在調試時,我用eclipse顯示值進行了測試,而不是返回方法,這讓我相信'JSONObject'序列化出了問題。我現在應該可以關閉這個問題 –

+0

@LucasPalmaStabile有關詳細信息,請參閱鏈接的Eclipse錯誤(我也能夠重現該問題)。如果您願意,您可以投票選出錯誤或將您的電子郵件添加到CC以跟蹤此問題的進展情況。 – howlger