【问题标题】:Receiving ? when smiley(\ue415) is posted to server接收 ?当笑脸(\ue415)发布到服务器时
【发布时间】:2012-03-16 19:42:27
【问题描述】:

我正在尝试向服务器发送笑脸。

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:tem="http://tempuri.org/"> 
<soapenv:Header/>
<soapenv:Body>
<tem:PostMessage>
<tem:UserID>1</tem:UserID>
<tem:FriendID>3</tem:FriendID>
<tem:Message>\ue415</tem:Message>
</tem:PostMessage>
</soapenv:Body>
</soapenv:Envelope> 

这是我发布到服务器的内容。但是服务器将消息作为 ?。所以其他用户也收到消息为 ? 而不是 \ue415 是笑脸 (:D)。

【问题讨论】:

  • here。其中一个答案建议直接发送:D...
  • 服务器如何显示文本? (是html,你看的是调试器,是命令行吗?)

标签: iphone ios


【解决方案1】:

\ue415 是 16 位字符代码,但您的文件指定了 UTF-8 编码,因此您需要将该字符转换为正确的 UTF-8 序列。根据http://www.utf8-chartable.de/unicode-utf8-table.pl?start=58368

ee 90 95

因此,如果客户端的格式正确,则将 \ue415 替换为 \xee\x90\x95 将起作用。如果它期待 HTML 实体,它会是  (或类似的东西)。


还有一件事:我突然想到,我看到的表情符号都采用 UTF-16 格式的两个字符。事实证明 0xE415 是一种老式的表情符号编码(here's 一个关于它的 SO 帖子)。新 unicode 标准中该表情符号的代码是 0x1f604,或 UTF-8:

F0 9F 98 84

【讨论】:

  • 对于 F0 9F 98 84,要传递的字符串是什么?
  • \xNN 是格式化字符串中十六进制字节的一种方法。 (请参阅 developer.apple.com/library/mac/#documentation/cocoa/conceptual/… 中的“字符串和非 ASCII 字符”)例如,[NSString stringWithUTF8String:@"\xF0\x9F\x98\x84"] 返回带有笑脸表情的 NSString。问题是:在您的文本进入服务器之前,它会发生哪些解码步骤?肥皂信息的文本来自哪里?它是由您的代码生成的吗?它在文本文件中吗?
  • 我暂时不遵循任何编码步骤。它是来自代码的文本。我将笑脸作为按钮,我将其标题设置为 \ue415 等等。当用户触摸这些按钮时,我将这些标题作为消息传递。
  • 好的,明白了。因此,您将 button.titleLabel.text 附加到 NSMutableString,或者使用 -[NSString stringWithFormat:] 创建肥皂消息,对吗?在某些时候,该字符串必须转换为字节序列才能通过网络。要正确执行此操作,您需要指定字符串编码;例如,要从 NSString 中获取 NSData,可以使用 [string dataUsingEncoding:NSUTF8StringEncoding]。如果您查看该 NSData,您会看到笑脸表情已转换为 UTF-8 序列 ee 90 95。……或者这与您所看到的不符?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多