我在我的应用程序中使用了https://github.com/rockerhieu/emojicon库.当我在我的代码中传递静态unicode字符串时,表情符号是可见的,但是如果我使用常规的get webservice将表情符号发送到php服务器并检索字符串,那么它只是将unicode字符串显示到我的应用程序中.如果我比较,静态和服务器检索的字符串是相同的.
谁能告诉我在申请中做了什么错误.在IOS中开发了相同的应用程序,他们所做的是在发送到服务器时首先将字符串编码为ASCII> UTF-8.然后他们以与发送时相同的方式解码字符串.任何人都可以建议我,如果这也兼容android,如果是的话,我怎么能这样做.
我和表情符号使用了相同的库.我使用URLEncoder.encode(commentString,"UTF-8")进行编码,类似地,使用URLDecoder.decode(encodedComment,"UTF-8")进行解码.
适合我.希望也适合你.
我们可以使用commons-lang(commons-lang-2.5.jar)库来编码和解码unicode字符.在这里下载jar文件或使用gradle:compile 'org.apache.commons:commons-lang3:3.4'
.
对于编码使用 - StringEscapeUtils.escapeJava(String text)
这可以在android中使用EditText
调用时使用getText
方法时,它将在发送到Web服务器之前正确编码unicode字符.
对于解码使用 - StringEscapeUtils.unescapeJava(String text)
这可以在android TextView
中使用setText
,它将在收到来自Web服务器的响应后正确解码unicode字符.
例如:
EditText etEmojiEditText = new EditText(this); etEmojiEditText.setText("TYPE SOMETHING IN EMOJI"); String toServer = etEmojiEditText.getText(); String toServerUnicodeEncoded = StringEscapeUtils.escapeJava(toServer); String serverResponse = "SOME RESPONSE FROM SERVER WITH UNICODE CHARACTERS"; String fromServerUnicodeDecoded = StringEscapeUtils.unescapeJava(serverResponse);
仅供参考.也可以使用Web服务端的编码和解码.Unicode编码的字符串应该从Web服务解码,Web服务的响应应该在发送给客户端之前进行编码.服务器表应包含utf8mb4而不是utf8,因为unicode字符每个字符需要4个字节.因此unicode不会以3字节表示.