如何恢复已经存储在普通utf8中的4字节表情符号的正确编码 - 如下所示:ðŸ〜Š?

Rya*_*yan 8 php unicode encoding character-encoding emoji

是否可以再次将表情符号3或4字节字符串重新编码为表情符号?

我继承了一个带有utf8_unicode_ci编码的MySQL Innodb表.这些表情符号4字节字符串无处不在.是否有可能将它们翻译成表情符号?

第一步是修改character setto utf8mb4.这改变了所有字符串,就像ð??£这样的字符串:😊.

但我真正想要的是翻译😊成类似的东西笑脸表情符号.(我不知道是否😊真的是一个笑脸)

Jos*_*efZ 5

受到Ignacio Vazquez-Abrams 评论的启发。接下来的 python 代码片段显示了EmojiMojibake的原始过程,反之亦然(修复):

\n\n
print ( "\\nEmoji to mojibake (origin):")\nfor emojiChar in [\'\',\'\',\'\',\'\']:\n    print ( emojiChar, emojiChar.encode(\'utf8\').decode(\'cp1252\'))\n\nprint ( "\\nmojibake to Emoji (repair):")\nfor mojibakeString in [\'\xc3\xb0\xc5\xb8\xcb\x9c\xc5\xa0\',\'\xc3\xb0\xc5\xb8\xcb\x9c\xc2\xa3\',\'\xc3\xb0\xc5\xb8\xe2\x80\x98\xc2\xbd\',\'\xc3\xb0\xc5\xb8\xcb\x9c\xc5\xbd\',\'\xc3\xb0\xc5\xb8\xe2\x84\xa2\xe2\x80\xa1\']:\n    print ( mojibakeString, mojibakeString.encode(\'cp1252\').decode(\'utf8\'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

知道问题被标记为php而不是python;让我希望类似的php解决方案可以非常接近\xe2\x80\xa6

\n\n

输出

\n\n
==> chcp 65001\nActive code page: 65001\n\n==> D:\\test\\Python\\20108312.py\n\nEmoji to mojibake (origin):\n \xc3\xb0\xc5\xb8\xcb\x9c\xc5\xa0\n \xc3\xb0\xc5\xb8\xcb\x9c\xc2\xa3\n \xc3\xb0\xc5\xb8\xe2\x80\x98\xc2\xbd\n \xc3\xb0\xc5\xb8\xcb\x9c\xc5\xbd\n\nmojibake to Emoji (repair):\n\xc3\xb0\xc5\xb8\xcb\x9c\xc5\xa0 \n\xc3\xb0\xc5\xb8\xcb\x9c\xc2\xa3 \n\xc3\xb0\xc5\xb8\xe2\x80\x98\xc2\xbd \n\xc3\xb0\xc5\xb8\xcb\x9c\xc5\xbd \n\xc3\xb0\xc5\xb8\xe2\x84\xa2\xe2\x80\xa1 \n\n==>\n
Run Code Online (Sandbox Code Playgroud)\n\n

Python版本:

\n\n
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32\n
Run Code Online (Sandbox Code Playgroud)\n


Stu*_*nie 0

大多数表情符号需要 21 位,这是补充多语言平面的一部分。根据该页面上的图表,表情符号以 为前缀1F,范围1F31F7。如果您的应用程序只是去掉前 5 位以适应 16 位,那么您将剩下 3xxx -> 7xxx。根据基本多语言平面上的信息,这主要映射到亚洲表意文字。鉴于您显示的数据不是表意文字,您可能需要更深入地分析数据,看看是否可以通过将位重新组合在一起并添加前缀来恢复1F