<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      長文本拆分

      長文本拆分

      TL;DR

      1. 企業微信消息長度限制為2048個字節,字符長度不等于字節長度
      2. 使用字節拆分,會導致中文字符被截斷
      3. 使用文本+字節拆分,無法處理emoji表情
      4. 使用unicode字符拆分,即可解決以上問題

      先前在做企業微信的應用接入ChatGPT時遇到一個問題,就是企業微信的消息長度限制為2048個字節,所以遇到超長文本的時候需要拆分成多條消息發送。

      ??方法1

      起先想到的就是直接使用文本的長度拆分,但是很明顯的問題是,文本的長度并不等于字節的長度,因為中文字符的長度是2或者3個字節,而英文字符的長度是1個字節,按照文本長度拆出來的內容往往就超過了2048個字節的限制。

      var text = "假設這是一段超長的文本,超過了2048個字節";
      
      foreach(var chunk in text.Chunk(10)){
          new string(chunk).Dump();
      }
      
      /*
      output:
          假設這是一段超長的文
          本,超過了2048個
          字節
      */
      

      ???♂?方法2

      雖然按照字符的長度去拆分不可靠的話,那就需要按照字節的長度去拆分,但是這樣又會導致中文字符被截斷,所以就需要在拆分的時候,判斷當前字符的字節長度,然后去拆分。

      var text = "假設這是一段超長的文本,超過了2048個字節";
      
      var stringBuilder = new StringBuilder();
      var limit = 10;
      var bytes = 0;
      
      foreach (var c in text)
      {
          var bc = Encoding.UTF8.GetByteCount(c.ToString());
          if (bytes + bc > limit)
          {
              stringBuilder.ToString().Dump();
              stringBuilder.Clear();
              bytes = 0;
          }
          bytes += bc;
          stringBuilder.Append(c);
      }
      stringBuilder.ToString().Dump();
      
      /*
      output:
          假設這
          是一段
          超長的
          文本,
          超過了2
          048個字
          節
      */
      

      ??方法3

      上面的方法雖然可以解決中文字符被截斷的問題,但是卻無法處理emoji表情,因為emoji表情的長度有時候是4個字節,有時更長,在字符中都無法直接獲取
      ,所以在拆分的時候,會導致emoji表情被截斷。因此需要使用unicode字符來拆分,這樣就可以解決中文字符和emoji表情被截斷的問題。

      var text = "假設這是一段超長的文本,??超過了2048個字節";
      
      var stringBuilder = new StringBuilder();
      var limit = 10;
      var bytes = 0;
      
      var enumerator = StringInfo.GetTextElementEnumerator(text);
      
      while (enumerator.MoveNext())
      {
          string unicodeCharacter = enumerator.GetTextElement();
          var b = Encoding.UTF8.GetBytes(unicodeCharacter);
          if (bytes + b.Length >= limit)
          {
              stringBuilder.ToString().Dump();
              stringBuilder.Clear();
              bytes = 0;
          }
          bytes += b.Length;
          stringBuilder.Append(unicodeCharacter);
      }
      stringBuilder.ToString().Dump();
      
      /*
      output:
          假設這
          是一段
          超長的
          文本,
          ??超
          過了204
          8個字
          節
      */
      
      posted @ 2023-08-17 14:02  宵伯特  閱讀(699)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 柘荣县| 欧洲中文字幕一区二区| 国产在线精品一区二区三区| 强奷乱码中文字幕| 蜜桃一区二区三区免费看| 久久精品伊人波多野结衣| 蜜桃无码一区二区三区| 久久综合狠狠综合久久激情| 国产精品亚洲二区亚瑟| 92成人午夜福利一区二区| 白嫩人妻精品一二三四区| 日本欧美一区二区三区在线播放| 麻豆国产成人AV在线播放| 国产免费久久精品44| 精品国产亚洲一区二区三区| 久久亚洲精品中文字幕馆| 亚欧美闷骚院| av色国产色拍| 国产精品一久久香蕉国产线看观看| 亚洲人黑人一区二区三区| 久久精品久久电影免费理论片 | 中文字幕无码av不卡一区| 人妻aⅴ无码一区二区三区| 九九久久人妻一区精品色| 91精品国产午夜福利| 免费吃奶摸下激烈视频| 亚洲老妇女亚洲老熟女久| 人妻中文字幕不卡精品| 沾化县| 热久在线免费观看视频| 国产AV无码专区亚洲AV潘金链 | 亚洲精品自拍视频在线看| 樱桃视频影院在线播放| 亚洲AV成人片在线观看| 在线国产极品尤物你懂的| 内射视频福利在线观看| 国产怡春院无码一区二区| 国产精品一国产精品亚洲| 国产欧美一区二区精品久久久| 久久道精品一区二区三区| 日韩一区二区三区女优丝袜|