亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#(.net)中按字節(jié)數(shù)截取字符串最后出現(xiàn)亂碼問題的解決

 更新時間:2018年06月03日 15:56:01   作者:熊仔其人  
這篇文章主要給大家介紹了關(guān)于C#(.net)中按字節(jié)數(shù)截取字符串最后出現(xiàn)亂碼問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

最近需要用到按字節(jié)數(shù)截取字符串。在網(wǎng)上找了很多方法。

Encoding.Default.GetString采用的Default

Encoding.UTF8.GetBytes采用的是utf-8編碼。這樣當(dāng)然是亂碼。尤其出現(xiàn)中文時候。

對這類數(shù)據(jù)處理當(dāng)然要用統(tǒng)一的編碼來處理。下面話不多說了,來一起看看詳細(xì)的介紹吧

例子: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);

實(shí)際結(jié)果是截取的結(jié)尾會出現(xiàn)亂碼。原因是最后的字符是多個字節(jié),被不完整的截取了。

改進(jìn)后的辦法如下:

/// <summary>
 /// 按字節(jié)數(shù)截取字符串的方法(比SubString好用)
 /// </summary>
 /// <param name="source">要截取的字符串(可空)</param>
 /// <param name="NumberOfBytes">要截取的字節(jié)數(shù)</param>
 /// <param name="encoding">System.Text.Encoding</param>
 /// <param name="suffix">結(jié)果字符串的后綴(超出部分顯示為該后綴)</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>
 /// 按字節(jié)數(shù)截取字符串的方法(比SubString好用)
 /// </summary>
 /// <param name="source">要截取的字符串(可空)</param>
 /// <param name="NumberOfBytes">要截取的字節(jié)數(shù)</param>
 /// <param name="encoding">UTF-8,Unicode,GB2312...</param>
 /// <param name="suffix">結(jié)果字符串的后綴(超出部分顯示為該后綴)</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);
 }

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

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

JS代碼是不是比較簡潔?

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論