中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

武安市| 台湾省| 盘锦市| 盐边县| 获嘉县| 贡山| 桃江县| 克拉玛依市| 聂拉木县| 昌平区| 定陶县| 望谟县| 广西| 门源| 长春市| 拜泉县| 金平| 青州市| 寿宁县| 东港市| 沙坪坝区| 长海县| 饶平县| 砚山县| 寿宁县| 兰坪| 布拖县| 长阳| 浦东新区| 康乐县| 辉县市| 斗六市| 章丘市| 阿鲁科尔沁旗| 乐东| 凤翔县| 广灵县| 潜山县| 吉水县| 邳州市| 喀喇沁旗|