最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

Encoding.Default.GetString采用的Default

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

對(duì)這類(lèi)數(shù)據(jù)處理當(dāng)然要用統(tǒng)一的編碼來(lái)處理。下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(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é)尾會(huì)出現(xiàn)亂碼。原因是最后的字符是多個(gè)字節(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ǎn)單,就是截取之前逐個(gè)先判斷字符是否超出字節(jié)長(zhǎng)度,如果超出則扔掉整個(gè)字符。

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

JS代碼是不是比較簡(jiǎn)潔?

總結(jié)

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

相關(guān)文章

最新評(píng)論

舞钢市| 鸡东县| 临城县| 阳新县| 南郑县| 鄂温| 蒙自县| 龙岩市| 呈贡县| 自治县| 黔西县| 肃南| 遵义县| 珠海市| 崇阳县| 从化市| 吉林市| 周至县| 安丘市| 南开区| 苏尼特右旗| 阜康市| 济宁市| 蓬莱市| 汽车| 达尔| 仙桃市| 景东| 宁波市| 颍上县| 闻喜县| 博湖县| 高密市| 巧家县| 图片| 邛崃市| 高淳县| 清苑县| 诏安县| 阿拉善左旗| 公安县|