91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#如何解決中按字節數截取字符串最后出現亂碼問題

發布時間:2021-07-21 10:19:27 來源:億速云 閱讀:257 作者:小新 欄目:編程語言

這篇文章主要介紹C#如何解決中按字節數截取字符串最后出現亂碼問題,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

前言

最近需要用到按字節數截取字符串。在網上找了很多方法。

Encoding.Default.GetString采用的Default

Encoding.UTF8.GetBytes采用的是utf-8編碼。這樣當然是亂碼。尤其出現中文時候。

對這類數據處理當然要用統一的編碼來處理。下面話不多說了,來一起看看詳細的介紹吧

例子:1

 string msg= Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(strcode));

例子:2

string strcode="我是小明";
byte[] buffer=Encoding.UTF8.GetBytes(strcode);
string msg= Encoding.UTF8.GetString(buffer,0,buffer.Length);

實際結果是截取的結尾會出現亂碼。原因是最后的字符是多個字節,被不完整的截取了。

改進后的辦法如下:

/// <summary>
 /// 按字節數截取字符串的方法(比SubString好用)
 /// </summary>
 /// <param name="source">要截取的字符串(可空)</param>
 /// <param name="NumberOfBytes">要截取的字節數</param>
 /// <param name="encoding">System.Text.Encoding</param>
 /// <param name="suffix">結果字符串的后綴(超出部分顯示為該后綴)</param>
 /// <returns></returns>
 public static string SubStringByBytes(string source, int NumberOfBytes, System.Text.Encoding encoding, string suffix = "...")
 {
  if(string.IsNullOrWhiteSpace(source) || source.Length == 0)
  return source;

  if(encoding.GetBytes(source).Length <= NumberOfBytes)
  return source;

  long tempLen = 0;
  StringBuilder sb = new StringBuilder();
  foreach(var c in source)
  {
  Char[] _charArr = new Char[] { c };
  byte[] _charBytes = encoding.GetBytes(_charArr);
  if((tempLen + _charBytes.Length) > NumberOfBytes)
  {
   if(!string.IsNullOrWhiteSpace(suffix))
   sb.Append(suffix);
   break;
  }
  else
  {
   tempLen += _charBytes.Length;
   sb.Append(encoding.GetString(_charBytes));
  }
  }
  return sb.ToString();
 }
 /// <summary>
 /// 按字節數截取字符串的方法(比SubString好用)
 /// </summary>
 /// <param name="source">要截取的字符串(可空)</param>
 /// <param name="NumberOfBytes">要截取的字節數</param>
 /// <param name="encoding">UTF-8,Unicode,GB2312...</param>
 /// <param name="suffix">結果字符串的后綴(超出部分顯示為該后綴)</param>
 /// <returns></returns>
 public static string SubStringByBytes(string source, int NumberOfBytes, string encoding = "UTF-8", string suffix = "...")
 {
  return SubStringByBytes(source, NumberOfBytes, Encoding.GetEncoding(encoding), suffix);
 }

原理很簡單,就是截取之前逐個先判斷字符是否超出字節長度,如果超出則扔掉整個字符。

在JavaScript里面的Blob對象很容易獲取字節長度: var len= new Blob(['字符串']).size;

以上是“C#如何解決中按字節數截取字符串最后出現亂碼問題”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿合奇县| 赣州市| 施秉县| 临武县| 武定县| 九江县| 项城市| 迁安市| 封开县| 乌什县| 永嘉县| 临湘市| 清徐县| 遂川县| 新干县| 京山县| 正安县| 钟山县| 县级市| 木里| 彰化市| 东乡| 灯塔市| 黄骅市| 湟中县| 隆化县| 林口县| 榆树市| 彝良县| 祁阳县| 伊金霍洛旗| 泊头市| 会理县| 农安县| 台江县| 石家庄市| 中宁县| 宜良县| 平度市| 互助| 宾川县|