国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2020-01-24 00:17:34
字體:
來源:轉載
供稿:網友

前言

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

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代碼是不是比較簡潔?

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新建县| 安宁市| 洛宁县| 蒙山县| 吕梁市| 额济纳旗| 安吉县| 车险| 镇原县| 赣州市| 金平| 梨树县| 如皋市| 休宁县| 安吉县| 布尔津县| 武乡县| 嘉义县| 贵南县| 会泽县| 菏泽市| 常州市| 天气| 墨竹工卡县| 广饶县| 淮阳县| 台中市| 莒南县| 阿克陶县| 海阳市| 德州市| 郸城县| 乐陵市| 沂南县| 晋江市| 阿拉善左旗| 鄂尔多斯市| 唐山市| 桑植县| 灯塔市| 舒兰市|