[{"data":1,"prerenderedAt":174},["ShallowReactive",2],{"article-utf-16-supporting":3},{"id":4,"title":5,"body":6,"date":138,"description":139,"downloads":143,"extension":147,"hide":148,"links":149,"meta":156,"navigation":157,"path":158,"seo":159,"slug":161,"stem":162,"tags":163,"__hash__":173},"articles\u002Farticles\u002Futf-16-supporting.md","Scratch支持UTF-16",{"type":7,"value":8,"toc":127},"minimark",[9,30,46,50,61,72,91,102,105,116,123],[10,11,12,14],"h2",{"id":12,"class":13},"复现过程","section-heading",[15,16,19,25],"a",{"class":17,"href":18},"section-link","#复现过程",[20,21,24,12],"span",{"className":22},[23],"visually-hidden","章节",[20,26,29],{"ariaHidden":27,"tabIndex":28},"true",-1," §",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-plain shiki shiki-themes dracula","😊😇🥰😍🤩\n","plain","",[38,39,40],"code",{"__ignoreMap":36},[20,41,44],{"class":42,"line":43},"line",1,[20,45,34],{},[47,48,49],"p",{},"如该表情字符串。如果使用基本的字符串转列表，会将这些表情符号转换成乱码。",[10,51,52,53],{"id":52,"class":13},"问题原因",[15,54,56,59],{"class":17,"href":55},"#问题原因",[20,57,24,52],{"className":58},[23],[20,60,29],{"ariaHidden":27,"tabIndex":28},[47,62,63,64,67,68,71],{},"这主要是因为 ",[38,65,66],{},"UTF-16"," 字符串错误地被 ",[38,69,70],{},"UCS-2"," 读取。",[73,74,75,84],"ul",{},[76,77,78,79,83],"li",{},"UTF-16是一个",[80,81,82],"strong",{},"变长表示","，一个Unicode字符可能由1个或2个16位长的码元表示。2个16位长的码元被称为一个代理对，第一个码元为UTF-16标志位。",[76,85,86,87,90],{},"UCS-2是一个",[80,88,89],{},"固定表示","，每个Unicode字符由2个字节表示。\n则UTF-16中由2个16位长的码元表示的字符，在UCS-2中读取会变成两个乱码字符。",[10,92,93,94],{"id":93,"class":13},"解决方法",[15,95,97,100],{"class":17,"href":96},"#解决方法",[20,98,24,93],{"className":99},[23],[20,101,29],{"ariaHidden":27,"tabIndex":28},[47,103,104],{},"手动处理字符串。当遇到UTF-16标志位，将两个码元合并为一个字符加入列表，否则直接将一个码元加入列表。然后列表中就是正确的字符列表。这样可以通过列表实现正确的字符操作，并同时支持UTF-16中用一个码元表示的字符和代理对。",[10,106,107,108],{"id":107,"class":13},"截图",[15,109,111,114],{"class":17,"href":110},"#截图",[20,112,24,107],{"className":113},[23],[20,115,29],{"ariaHidden":27,"tabIndex":28},[47,117,118],{},[119,120],"img",{"alt":121,"src":122},"Scratch支持UTF-16解决方案截图","\u002Fraw\u002Futf-16-supporting-solution.png",[124,125,126],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":36,"searchDepth":128,"depth":128,"links":129},2,[130,132,134,136],{"id":12,"depth":128,"text":131},"复现过程章节复现过程 §",{"id":52,"depth":128,"text":133},"问题原因章节问题原因 §",{"id":93,"depth":128,"text":135},"解决方法章节解决方法 §",{"id":107,"depth":128,"text":137},"截图章节截图 §","2025\u002F2\u002F17",[140,141,142],"Scratch将UTF-16错误地由UCS-2读取。","而Scratch不支持直接获取包含特殊表情字符的长度，或某个字符。","本示例展示如何手动处理字符串，解决该问题。",[144],[145,146],"\u002Fraw\u002Futf-16-supporting.sb3","下载示例程序","md",false,[150,153],[151,152],"https:\u002F\u002Fgithub.com\u002FIsBenben\u002FFunny-Things\u002Fblob\u002Fmain\u002FUTF-16支持.sb3","查看示例程序",[154,155],"https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1iawdejEnG","演示视频",{},true,"\u002Farticles\u002Futf-16-supporting",{"title":5,"description":160},[140,141,142],"utf-16-supporting","articles\u002Futf-16-supporting",[164,167,170],[165,166],"lang","scratch3",[168,169],"inspiration","original",[171,172],"content","learning","vmQLUSw74rPSIbDNPfzdyevyxJlD4DDjWeXGsO4SyBw",1778909018763]