Utf8编码让我很困惑

Utf8 encoding makes me confused

let buf1 = Buffer.from("3", "utf8");

let buf2 = Buffer.from("Здравствуйте", "utf8");

// <Buffer 33>

// <Buffer d0 97 d0 b4 d1 80 d0 b0 d0 b2 d1 81 d1 82 d0 b2 d1 83 d0 b9 d1 82 d0 b5>

为什么字符“3”在 buf1 中编码为“33”,而在 buf2 中编码为 'd0 97'?

因为 3 不是 З,尽管与未经训练的眼睛相似。仔细观察,您会发现差异,无论多么细微。

前者是Unicode代码点U+0033 - DIGIT THREE(参见here), while the latter is U+0417 - CYRILLIC CAPITAL LETTER ZE (see here),在UTF-8中编码为d0 97.

俄语单词实际上是你好,发音(非常粗略,因为我只知道你好和再见,俄罗斯女朋友教的许多 几十年前)“Strasvoytza”,在概念中的任何地方都没有“三”。

第二个缓冲区的第一个字符是西里尔字符“Ze”https://en.m.wikipedia.org/wiki/Ze_(Cyrillic) and not the Arabic numeral 3 https://en.m.wikipedia.org/wiki/3