熊加上雪花等于北极熊

2021-06-17 05:13:31

正确的答案是:6.或7,如果你想成为迂腐并包括纽诺,但我们不是。

这很简单;此页面被编码为UTF-8,暗示每个ASCII字符的8位,或每个字符的字节。

不相信我?继续从此页面复制并进行快速检查:

呵呵??额外的字节来自哪里?好吧,事实是,这条线上有一个冒险体。

那是对的,它是OL' utf-8肮脏的'е'伎俩。没有人期待你+ 0435。如果是您第一次遇到此操作,则简要说明:是的,UTF-8是前128个字符的单字节,与传统的ASCII完美相关联。但UTF-8编码的完整Unicode标准包括13.0版的143,859个字符。要表示全频谱,UTF-8必须为某些字符使用多个字节(从技术上,大多数角色)。这就是这样,这一广泛的角色包括一些看起来像邻近的一个看法,就像你友好的邻里1-byte ascii“e”和你的少崇拜但仍然友好的2字节肮脏的“е”。

正确的答案是... 4.要表示Unicode U + 1F642,UTF-8使用CodePoint的完整4个字节。

// rest fn main(){让emoji ="🙂&#34 ;; println!(" emoji:{}}",emoji); println!("长度:{}" emoji.len()); println!("字节:{:x?}",emoji.as_bytes())}

这4个字节如何映射到Unicode字符🙂,代码点U + 1F642?

在UTF-8中,第一个字节告诉您构成了字符的字节数。如果字节从0开始,则它是一个1字节的字符。如果它以1开始,它是多个字节,下一个三位告诉您只需多少字节。维基百科文章可能解释它比我能更好,但这是一个简单的表:

您可能会记得先前的utf-8如何使用“前128个字符的一个字节”,直接映射到ASCII。这是巧妙和方便的,因为128个ASCII字符由7位表示(2 ^ 7 = 128),因此UTF-8可以使用剩余的第一位作为标记,并且仍然保持完美的ASCII兼容性。

所以,回到二进制表示的🙂。第一个字节是11110000,它从11110开始,这意味着我们必须看四个字节来了解这是什么CODEPOINT。

接下来的三个字节,每个三个字节以10开始,这是UTF-8中的其他唯一前缀。它只是意味着这个字节不是第一个代码点中的第一个。我假设这是如此,所以解析器可以确定中流,无论它们是在字符的开头。

你可能会认为答案是4.你也可能觉得我试图在你身上速度。

我必须承认某事:我被骗了。我在上面给出的例子实际上是一个图像,因为您的浏览器可能没有近来足够的字体来呈现这个新的Unicode 13.1字符。以下是您的浏览器在本地渲染它的尝试:

如果您的字体太旧以代表Unicode 13.1,您可能已经看到了这样的内容,它会回答一个UTF-8字符的谜语 - 我们从早期知道哪个是最多4个字节 - 可以是36字节:

这是正确的。它超过4个字节,因为它不止一个角色!您(希望)看到的表情符号实际上是根据其他表情符号定义的,与无形的码头拼接在一起!!

事实上,我们可以进一步扩展上述内容,因为肤色以相同的方式拼接在一起:

👩+🏾+❤+💋+👩+🏻+❤+💋+👩🏻=

所有这一切都可以在Unicode Codepoint中看到Emoji,Unicode命名为:“吻:女性,女性,中暗肤色,轻肤色”。

U + 1F469:👩(4字节)U + 1F3FE:🏾(4字节)U + 200D:零宽连接(3字节)U + 2764:❤(3字节)U + FE0F:变型选择器(3字节)U + 200D:零宽连接(3个字节)U + 1F48B:💋(4字节)U + 200d:Zero-Width Join(3字节)U + 1F469:👩(4字节)U + 1F3FB:🏻(4字节)总计:35个字节

现在我们可以看到一个字符如何由多个代码点组成,这些点反过来由多个字节组成。

其他人是由非常有趣的组合组成。显然,Unicode委员会对此有一些乐趣。这是一些有趣的:

👩(女人; U + 1F469)+🌾(捆米; U + 1F33E)=👩🌾️(女农民; U + 1F469 U + 200d U + 1f33e)👨(人; U + 1f468)+🏭(工厂; U + 1F3ED)=👨🏭️(男子工厂工人; U + 1F468 U + 200d U + 1F3ED)👩(女人; U + 1F469)+✈(平面; U + 2708)=👩✈️️(女式飞行员; U + 1F469 U + 200d U + 2708 U + FE0F)👩(女人; U + 1F469)+🚀(火箭; U + 1F680)=👩🚀️(妇女宇航员; U + 1F469 U + 200d U + 1F680)

最后,也许是我最喜欢的,我非常喜欢这么多,我制作了这个博客帖子的标题。

因此,正如我们所学到的那样,Unicode字符可以由多个字节组成,但它也可以由多个其他Unicode字符组成。在早期的示例中,它们可以是相当大的 - 35字节。

...... Tweet的文本内容最多可包含280个字符或Unicode字形。一些字形将算作一个以上的角色。

无论组合修饰符如何,Twemoji支持的表情符号始终算作两个字符。这包括由Fitzpatrick肤色或性别修饰器进行修改的表达卓,即使它们由更明显的Unicode码点组成。

换句话说,无论unicode emoji字符的字节计数如何,它永远不会算作超过2个字符。

👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻👩🏿‍❤️‍💋‍👩🏻

— andy (@andy_xor_andrew) June 13, 2021

Of course, if your goal was to use the most amount of data in a single tweet, you would probably upload a video.

But as a software developer, it’s always fun to think about edge cases, and squeezing almost 5KB into a 280-“character” tweet is fun 🙂

I did my best to be factual and accurate, but if you noticed any errors, email me at andysalerno at gmail dotcom, or file a Github issue at https://github.com/andysalerno/andysalerno.com