在VB.NET中将ASCII字符代码转换为字符

时间:2011-07-15 17:22:42

标签: asp.net vb.net string string-formatting

我有一个值,我将其拉入一个看起来像这样的字符串:

  

M'arta

我需要让它将数值转换为实际值,以便字符串如下所示:

  

M'arta

有关如何在VB.NET中实现此目的的任何想法?以下是返回此结果的相关代码行:

Dim occupant as String = GridView1.Rows(e.RowIndex).Cells(2).Text

4 个答案:

答案 0 :(得分:3)

您可以解析查找#digits的字符串,然后将找到的代码放入ChrW .NET函数中。

答案 1 :(得分:3)

以下是您要问的VB(&amp; C#)版本。基本上,使用Regex方法中的MatchEvaluator参数来允许自定义解析匹配项。在这种情况下,我们发现#<1-3_digit_number>的任何实例都要删除`#符号,并转换十进制代码。

我在您的字符串(#116)中添加了第二次转换,仅用于测试目的。您可以将其重构为自定义方法并且(不确定VB是否具有它)lambda表达式使其具有通用性,但我会将其留给您。

VB.NET版本(DEMO

Imports System.Text.RegularExpressions

Public Class Test
        Public Shared Sub Main()
                Dim sample As [String] = "M#39ar#116a"

                Dim reg As New Regex("\x23\d{1,3}")
                Console.WriteLine(reg.Replace(sample, New MatchEvaluator(AddressOf ReplaceASCIICode)))
        End Sub

        Public Shared Function ReplaceASCIICode(m As Match) As [String]
                Dim code As Int32 = Int32.Parse(m.Value.Substring(1))
                Return Convert.ToString(ChrW(code))
        End Function
End Class

C#版本(DEMO

using System;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        String sample = "M#39ar#116a";

        Regex reg = new Regex(@"\x23\d{1,3}");
        Console.WriteLine(reg.Replace(sample, new MatchEvaluator(ReplaceASCIICode)));
    }

    public static String ReplaceASCIICode(Match m)
    {
        Int32 code = Int32.Parse(m.Value.Substring(1));
        return Convert.ToString((char)code);
    }
}

出于存档目的,以下是支持&#___;的版本:

VB.NET(DEMO

Imports System.Text.RegularExpressions

Public Class Test
        Public Shared Sub Main()
                Dim sample As [String] = "M&#39;ar&#116;a"

                Dim reg As New Regex("&#(\d{1,3});")
                Console.WriteLine(reg.Replace(sample, New MatchEvaluator(AddressOf ReplaceASCIICode)))
        End Sub

        Public Shared Function ReplaceASCIICode(m As Match) As [String]
                Dim code As Int32 = Int32.Parse(m.Groups(1).Value)
                Return Convert.ToString(ChrW(code))
        End Function
End Class

C#(DEMO

using System;
using System.Text.RegularExpressions;

public class Test
{
        public static void Main()
        {
                String sample = "M&#39;ar&#116;a";

                Regex reg = new Regex(@"&#(\d{1,3});");
                Console.WriteLine(reg.Replace(sample, new MatchEvaluator(ReplaceASCIICode)));
        }

        public static String ReplaceASCIICode(Match m)
        {
                Int32 code = Int32.Parse(m.Groups[1].Value);
                return Convert.ToString((char)code);
        }
}

答案 2 :(得分:1)

我不知道VB.NET,但这是一个C#解决方案。我很确定你可以处理转换为Visual Basic。

using System;
using System.Text.RegularExpressions;

class Program {
    static void Main(string[] args) {
        String input = "M#39arta";
        String output = Regex.Replace(input, @"#\d\d",  Replace);
        Console.WriteLine(output);
        Console.ReadLine();
    }

    static String Replace(Match match) {
        int charCode = int.Parse(match.Value.Substring(1));
        return ""+ (char)charCode;
    }
}

答案 3 :(得分:1)

如果你不知道正则表达式那么类似

    Dim idx As Integer = occupant.IndexOf("#")
    If idx <> -1 Then
        idx += 1
        Do While idx < occupant.Length
            If IsNumeric(occupant(idx)) Then
                s &= occupant(idx)
            Else
                Exit Do
            End If
            idx += 1
        Loop
        If s.Length > 0 Then
            s = Convert.ToChar(CInt(s))
        End If
        Stop
    End If

需要稍加修改才能处理#。

的多个实例