今天,我很惊讶地看到一个人入侵了Twitter的140个字符的限制。该消息包含930个字符。这怎么可能呢?
到此推文的直接链接在这里。为了方便起见,我在下面复制了完整推文的屏幕截图:
今天,我很惊讶地看到一个人入侵了Twitter的140个字符的限制。该消息包含930个字符。这怎么可能呢?
到此推文的直接链接在这里。为了方便起见,我在下面复制了完整推文的屏幕截图:
Answers:
该消息包含未正确编码为UTF-8的Unicode代理代码点。这种不正确的编码也称为CESU-8。似乎某些Twitter界面将接受CESU-8编码的替代代码点作为字符(出于140个字符限制的目的),但是出于显示目的,它期望有效的UTF-8且这些无效的UTF-8序列。因此,它将每个序列的3个字节显示为3个C样式的八进制转义序列,每个序列4个字符,并且每个替代代码点最终使用12个字符显示。
例如,如果将\ 355 \ 240 \ 265 \ 355 \ 263 \ 220解码为C换码的UTF-8,而不会像在解码UTF-8时那样正常地拒绝替代,则解码为代理对U + D835 U + DCD0。像解码CESU-8一样,将这对代理对视为UTF-16,会产生Unicode字符U + 1D4D0 MATHEMATICAL BOLD SCRIPT CAPITAL A(𝓐)。
如果对C样式的八进制转义进行了解码,然后将结果解释为CESU-8,则会得出:
Т𝓐𝓛𝓜𝓐𝓣𝓨Твиттиминеограничиваемсялюдиии!!!!!! 140непредел!=))))𝓐𝓛𝓜𝓐𝓣𝓨𝓐𝓛𝓜𝓐𝓣𝓨𝓐𝓛𝓜𝓐𝓣𝓨
对于没有安装全套Unicode字体的用户,这是一个图像:
每组以反斜杠开头,后跟三个数字的字符是“ 转义序列 ”。它们每个代表一个字符。这些通常用于键盘上不存在的字符,例如非英语字符和符号。
我的猜测是,在计算字符时,Twitter将这些组中的每一个都计数为一个字符,但是在将其显示给浏览器时,会将它们打印为四个。
更新:
一些可用的转义序列是“控制字符”。这些命令告诉计算机执行某些操作,例如播放警报声音或向左或向右或向上或向下移动光标,或删除光标左侧的字符。尽管它们都不是我提到的最后一个(删除前一个字符),但他可能也使用该字符来混淆Twitter。
有趣的是,当变回普通字符时,它是重复性的,看起来像这样:
í µ í ³ í µ í ³ › í µ í ³ œ í µ í ³ í µ í ³ £ í µ í ³ ¨ í µ í ³ í µ í ³ › í µ í ³ œ í µ í ³ í µ í ³ £ í µ í ³ ¨
更新2:
他给出的解释是“ПишитеDM,”。Google Translate告诉我的解释是“写至DM,始终保持连接状态”。我不确定这到底意味着什么或如何帮助。