mykinko 2023-02-19 21:18 采纳率: 100%
浏览 16
已结题

C# 转 VB.net代码

    private void button1_Click(object sender, EventArgs e)
    {

        textBox1.Text = System.IO.File.ReadAllText(@textBox2.Text , Encoding.GetEncoding("UTF-8")); //gb2312



        string fileName = @textBox2.Text ;
        Encoding encoding = GetTextFileEncodingType(fileName);
        Console.WriteLine(encoding.GetType());
        Console.WriteLine($"代码页:【{encoding.CodePage}】,描述【{encoding.EncodingName}】");
        Console.WriteLine($"WindowsCodePage:【{encoding.WindowsCodePage}】,WebName:【{encoding.WebName}】,HeaderName:【{encoding.HeaderName}】,BodyName:【{encoding.BodyName}】");
        Console.ReadLine();


    }
}
















    /// 
    /// 获取文本文件的字符编码类型
    /// 
    /// <param name="fileName"></param>
    /// <returns></returns>
    static Encoding GetTextFileEncodingType(string fileName)
    {
        Encoding encoding = Encoding.Default;
        FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
        BinaryReader binaryReader = new BinaryReader(fileStream, encoding);
        byte[] buffer = binaryReader.ReadBytes((int)fileStream.Length);
        binaryReader.Close();
        fileStream.Close();
        if (buffer.Length >= 3 && buffer[0] == 239 && buffer[1] == 187 && buffer[2] == 191)
        {
            encoding = Encoding.UTF8;
        }
        else if (buffer.Length >= 3 && buffer[0] == 254 && buffer[1] == 255 && buffer[2] == 0)
        {
            encoding = Encoding.BigEndianUnicode;
        }
        else if (buffer.Length >= 3 && buffer[0] == 255 && buffer[1] == 254 && buffer[2] == 65)
        {
            encoding = Encoding.Unicode;
        }
        else if (IsUTF8Bytes(buffer))
        {
            encoding = Encoding.UTF8;
        }
        return encoding;
    }

    /// 
    /// 判断是否是不带 BOM 的 UTF8 格式
    /// BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码。
    /// 
    /// <param name="data"></param>
    /// <returns></returns>
    private static bool IsUTF8Bytes(byte[] data)
    {
        int charByteCounter = 1; //计算当前正分析的字符应还有的字节数 
        byte curByte; //当前分析的字节. 
        for (int i = 0; i < data.Length; i++)
        {
            curByte = data[i];
            if (charByteCounter == 1)
            {
                if (curByte >= 0x80)
                {
                    //判断当前 
                    while (((curByte <<= 1) & 0x80) != 0)
                    {
                        charByteCounter++;
                    }
                    //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X 
                    if (charByteCounter == 1 || charByteCounter > 6)
                    {
                        return false;
                    }
                }
            }
            else
            {
                //若是UTF-8 此时第一位必须为1 
                if ((curByte & 0xC0) != 0x80)
                {
                    return false;
                }
                charByteCounter--;
            }
        }
        if (charByteCounter > 1)
        {
            throw new Exception("非预期的byte格式");
        }
        return true;
    }
  • 写回答

3条回答 默认 最新

  • 菜鸟才能学的更多 2023-02-19 21:37
    关注
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TextBox1.Text = System.IO.File.ReadAllText(TextBox2.Text, Encoding.GetEncoding("UTF-8")) 'gb2312
    Dim fileName As String = TextBox2.Text
    Dim encoding As Encoding = GetTextFileEncodingType(fileName)
    Console.WriteLine(encoding.GetType())
    Console.WriteLine($"代码页:【{encoding.CodePage}】,描述【{encoding.EncodingName}】")
    Console.WriteLine($"WindowsCodePage:【{encoding.WindowsCodePage}】,WebName:【{encoding.WebName}】,HeaderName:【{encoding.HeaderName}】,BodyName:【{encoding.BodyName}】")
    Console.ReadLine()
    End Sub
    
    Private Function GetTextFileEncodingType(fileName As String) As Encoding
    Dim encoding As Encoding = Encoding.Default
    Dim fileStream As New FileStream(fileName, FileMode.Open, FileAccess.Read)
    Dim binaryReader As New BinaryReader(fileStream, encoding)
    Dim buffer As Byte() = binaryReader.ReadBytes(CInt(fileStream.Length))
    binaryReader.Close()
    fileStream.Close()
    If buffer.Length >= 3 AndAlso buffer(0) = 239 AndAlso buffer(1) = 187 AndAlso buffer(2) = 191 Then
    encoding = Encoding.UTF8
    ElseIf buffer.Length >= 3 AndAlso buffer(0) = 254 AndAlso buffer(1) = 255 AndAlso buffer(2) = 0 Then
    encoding = Encoding.BigEndianUnicode
    ElseIf buffer.Length >= 3 AndAlso buffer(0) = 255 AndAlso buffer(1) = 254 AndAlso buffer(2) = 65 Then
    encoding = Encoding.Unicode
    ElseIf IsUTF8Bytes(buffer) Then
    encoding = Encoding.UTF8
    End If
    Return encoding
    End Function
    
    Private Function IsUTF8Bytes(data As Byte()) As Boolean
    Dim charByteCounter As Integer = 1 '计算当前正分析的字符应还有的字节数
    Dim curByte As Byte '当前分析的字节.
    For i As Integer = 0 To data.Length - 1
    curByte = data(i)
    If charByteCounter = 1 Then
    If curByte >= &H80 Then
    '判断当前
    While ((curByte <<= 1) And &H80) <> 0
    charByteCounter += 1
    End While
    '标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X
    If charByteCounter = 1 OrElse charByteCounter > 6 Then
    Return False
    End If
    End If
    Else
    '若是UTF-8 此时第一位必须为1
    If (curByte And &HC0) <> &H80 Then
    Return False
    End If
    charByteCounter -= 1
    End If
    Next
    If charByteCounter > 1 Then
    Throw New Exception("非预期的byte格式")
    End If
    Return True
    End Function
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 2月19日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来