C# 字符串轉字節截取


今天要截取一個文檔,發現C#中substring默認是將漢字當一個字節來截取的,但是我需要把漢字按照2個字節來算。

比如:

str="雪潔hello"

我想要前5個字節的字符,也就是"雪潔h"。

如何處理?

C#中substring默認是將漢字當一個字節來截取的,那么如何按字節數截取字符串?

答案:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
  
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        String str = "雪潔之家,xuejie's blog,你好,hello";
        TextBox1.Text = str.Substring(0, 8);
        TextBox2.Text = SubstringByte(str, 0, 8);
        TextBox3.Text = cutSubstring(str, 8);
        TextBox4.Text = SubstringByte(str, 0, 3);
        TextBox5.Text = cutSubstring(str, 3);
    }
  
    private static Encoding _encoding = System.Text.Encoding.GetEncoding("GB2312");
  
    //第一種方法
    private string SubstringByte(string text, int startIndex, int length)
    {
        byte[] bytes = _encoding.GetBytes(text);
        return _encoding.GetString(bytes, startIndex, length);
    }
  
    //第二種方法
    private string cutSubstring(string s, int length)
    {
        byte[] bytes = System.Text.Encoding.Unicode.GetBytes(s);
        int n = 0;  //  表示當前的字節數
        int i = 0;  //  要截取的字節數
        for (; i < bytes.GetLength(0) && n < length; i++)
        {
            //  偶數位置,如0、2、4等,為UCS2編碼中兩個字節的第一個字節
            if (i % 2 == 0)
            {
                n++;      //  在UCS2第一個字節時n加1
            }
            else
            {
                //  當UCS2編碼的第二個字節大於0時,該UCS2字符為漢字,一個漢字算兩個字節
                if (bytes[i] > 0)
                {
                    n++;
                }
            }
        }
        //  如果i為奇數時,處理成偶數
        if (i % 2 == 1)
        {
            //  該UCS2字符是漢字時,去掉這個截一半的漢字
            if (bytes[i] > 0)
                i = i - 1;
            //  該UCS2字符是字母或數字,則保留該字符
            else
                i = i + 1;
        }
        return System.Text.Encoding.Unicode.GetString(bytes, 0, i);
    }
}

來源:https://www.cnblogs.com/xuejie/archive/2012/12/14/2818452.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM