欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁(yè) > 軟件編程 > C#教程 >

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

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C#教程|點(diǎn)擊: 次

前言

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

Encoding.Default.GetString采用的Default

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

對(duì)這類數(shù)據(jù)處理當(dāng)然要用統(tǒng)一的編碼來(lái)處理。下面話不多說(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ì)我們的支持。

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有