diff --git a/docs/content/en/blog/DevLog-2025.08.01/CharacterMatcher.vue b/docs/content/en/blog/DevLog-2025.08.01/CharacterMatcher.vue index f122c1e7b..9dd6490e3 100644 --- a/docs/content/en/blog/DevLog-2025.08.01/CharacterMatcher.vue +++ b/docs/content/en/blog/DevLog-2025.08.01/CharacterMatcher.vue @@ -1,5 +1,6 @@ - - diff --git a/docs/content/zh-Hans/blog/DevLog-2025.08.01/CharacterShowcase.vue b/docs/content/zh-Hans/blog/DevLog-2025.08.01/CharacterShowcase.vue deleted file mode 100644 index ee905e9dc..000000000 --- a/docs/content/zh-Hans/blog/DevLog-2025.08.01/CharacterShowcase.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/docs/content/zh-Hans/blog/DevLog-2025.08.01/GraphemeClusterAssembler.vue b/docs/content/zh-Hans/blog/DevLog-2025.08.01/GraphemeClusterAssembler.vue deleted file mode 100644 index a76dc5546..000000000 --- a/docs/content/zh-Hans/blog/DevLog-2025.08.01/GraphemeClusterAssembler.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/docs/content/zh-Hans/blog/DevLog-2025.08.01/GraphemeClusterInspector.vue b/docs/content/zh-Hans/blog/DevLog-2025.08.01/GraphemeClusterInspector.vue deleted file mode 100644 index 776189a8e..000000000 --- a/docs/content/zh-Hans/blog/DevLog-2025.08.01/GraphemeClusterInspector.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - diff --git a/docs/content/zh-Hans/blog/DevLog-2025.08.01/RollingText.vue b/docs/content/zh-Hans/blog/DevLog-2025.08.01/RollingText.vue deleted file mode 100644 index b5bc00a7f..000000000 --- a/docs/content/zh-Hans/blog/DevLog-2025.08.01/RollingText.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - diff --git a/docs/content/zh-Hans/blog/DevLog-2025.08.01/assets/animated-chat-bubble.mp4 b/docs/content/zh-Hans/blog/DevLog-2025.08.01/assets/animated-chat-bubble.mp4 deleted file mode 100644 index c87b11b1d..000000000 Binary files a/docs/content/zh-Hans/blog/DevLog-2025.08.01/assets/animated-chat-bubble.mp4 and /dev/null differ diff --git a/docs/content/zh-Hans/blog/DevLog-2025.08.01/index.md b/docs/content/zh-Hans/blog/DevLog-2025.08.01/index.md index cb36d02c4..3643d8664 100644 --- a/docs/content/zh-Hans/blog/DevLog-2025.08.01/index.md +++ b/docs/content/zh-Hans/blog/DevLog-2025.08.01/index.md @@ -5,10 +5,10 @@ date: 2025-08-01 --- ## 开始之前 @@ -20,13 +20,13 @@ import RollingText from './RollingText.vue'
@@ -48,7 +48,7 @@ import RollingText from './RollingText.vue' 在 Project AIRI 里,我们的伙伴 [@nekomeowww](https://github.com/nekomeowww) 也做了一个丝滑的聊天气泡组件:
@@ -72,7 +72,7 @@ const decoded = decoder.decode(chunk, { stream: true }) ## 这样安全吗? -太长不看:**不的**。 +太长不看:**并不**。 TextDecoder 的确能帮我们把字节流正确解码成 Unicode 码点(字符)。但在 Unicode 里,还有「字素簇」(grapheme cluster)这个概念,它把多个码点组合成一个「视觉上」一体的字符。例如「👩‍👩‍👧‍👦」(家庭)这个 Emoji,底层其实由多个码点组成,但视觉上是一个字符。它们之间通过零宽连接符(ZWJ,码点 `U+200D`)连接。 @@ -138,7 +138,7 @@ while (true) {
-## Clustr 的诞生 +## [Clustr](https://github.com/sumimakito/clustr) 的诞生 写这篇 DevLog 的时候,社区中已经有不少可以把字符串拆分成字素簇的库了。但我没找到一个既能接受 UTF-8 字节流、又能随到随输出字素簇的实现。所以我自己实现了一个,并把思路分享给了大家,并取名为 [Clustr](https://github.com/sumimakito/clustr),和 Unicode 的「字素簇」概念相应。