a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

C#(.net)中按字節數截取字符串最后出現亂碼問題的解決

2019-10-29 19:59:04
字體:
來源:轉載
供稿:網友

前言

最近需要用到按字節數截取字符串。在網上找了很多方法。

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;

JS代碼是不是比較簡潔?

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美精品一区二区在线播放 | 五月婷婷六月激情 | 国产99久久精品一区二区永久免费 | 成视频年人免费看黄网站 | 色久视频 | 三级毛片在线 | 久久这里精品 | 三级特黄特色视频 | 91亚洲国产成人久久精品网站 | 蜜桃久久久 | 日韩成人一级片 | 亚洲中国字幕 | 蜜臀在线视频 | 在线视频成人永久免费 | 91免费版在线观看 | 成人免费视频在线观看 | 日韩毛片免费视频一级特黄 | 999热在线| 成人作爱视频 | 九一免费国产 | 成人欧美一区二区三区黑人麻豆 | 久久激情综合 | 日韩欧美网 | 国产一级91 | 色站综合| 亚洲一区二区高清视频 | 午夜精品一区二区三区免费视频 | 日韩欧美精品在线观看 | 久久6 | 欧美精品在线观看 | 国产精品日韩专区 | 九九99久久 | 国产极品一区 | 91精品久久久久久久久久 | 欧美二三区 | 99久久久久久久久 | 在线观看a视频 | 国产精品久久久久久久久久久久冷 | 国产精品美女av | 国产精品国色综合久久 | 国产精品久久久久久久久久 |