我打電話到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()
,這樣做返回相同的輸入:ߘ
這很可能是顯示問題而非其他問題。你應該嘗試編寫一個[MCVE]來驗證這一點(並且在你的問題中還包括你的環境的細節 - java版本,庫,版本庫等)。你可以嘗試的一件簡單的事情就是從字符串文本中將表情符號打印到表達式窗口中,並查看發生了什麼。 – pvg
好的,在這裏做了一個新的測試,調用'EmojiParser.parseToAliases()'直接在代碼中傳遞emojis,它以':raised_hands:'格式返回。它很可能是不能顯示這些表情符號的IDE –