這篇文章主要介紹C#如何解決中按字節(jié)數(shù)截取字符串最后出現(xiàn)亂碼問題,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、鑲黃網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為鑲黃等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
前言
最近需要用到按字節(jié)數(shù)截取字符串。在網(wǎng)上找了很多方法。
Encoding.Default.GetString采用的Default
Encoding.UTF8.GetBytes采用的是utf-8編碼。這樣當(dāng)然是亂碼。尤其出現(xiàn)中文時(shí)候。
對這類數(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é)尾會(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); }
原理很簡單,就是截取之前逐個(gè)先判斷字符是否超出字節(jié)長度,如果超出則扔掉整個(gè)字符。
在JavaScript里面的Blob對象很容易獲取字節(jié)長度: var len= new Blob(['字符串']).size;
以上是“C#如何解決中按字節(jié)數(shù)截取字符串最后出現(xiàn)亂碼問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享標(biāo)題:C#如何解決中按字節(jié)數(shù)截取字符串最后出現(xiàn)亂碼問題
標(biāo)題路徑:http://muchs.cn/article4/igegie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站收錄、微信小程序、動(dòng)態(tài)網(wǎng)站、App設(shè)計(jì)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)