亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

廊坊市| 阜新市| 大安市| 鄂托克旗| 孝昌县| 百色市| 凤台县| 宁强县| 涟源市| 锡林浩特市| 高阳县| 绵竹市| 怀柔区| 封丘县| 巨鹿县| 溧阳市| 广安市| 墨江| 石台县| 丁青县| 金平| 包头市| 宁海县| 邹平县| 新兴县| 云阳县| 湖南省| 丹江口市| 无棣县| 长岭县| 乌拉特后旗| 明水县| 铁岭市| 富平县| 原阳县| 苏州市| 安宁市| 阿城市| 江永县| 读书| 南昌市|