C# VB6与.NET编码问题(阿拉伯文字符)

C# VB6与.NET编码问题(阿拉伯文字符),c#,vb6,C#,Vb6,我正在将一个现有的VB6应用程序移植到.NET(C#7)。当前正在为创建问题的VB 6函数很简单 Private Function VB6Function(Name As String) As String Dim I As Integer Dim str_len As Integer Dim search_str As String Dim Search As String Dim search_asc As Integer For I = 1 To Len(Name) search

我正在将一个现有的VB6应用程序移植到.NET(C#7)。当前正在为创建问题的VB 6函数很简单

Private Function VB6Function(Name As String) As String
Dim I As Integer
Dim str_len As Integer
Dim search_str As String
Dim Search As String
Dim search_asc As Integer

For I = 1 To Len(Name)
    search_str = Mid$(Name, I, 1)
    search_asc = Asc(search_str)
      Select Case search_asc
        Case 200, 202, 203 To 214, 216, 217, 218, 219, 221 To 223, 225, 227, 228, 230
           Search = Search & search_str
      End Select
Next

GetSearchName = Search
End Function
当我转换成快速版时

publicstaticstringcsharpmethod(stringstr)
{            
if(string.IsNullOrWhiteSpace(str))
{
返回str;
}
var VALIDASCIAICHARECERTS=新列表{200、202、216、217、218、219、221、222、223、225、227、228、230};

对于(int i=203;i在做了大量研究之后,我发现这有助于我通过稍微调整来解决问题

    public static string CSharpMethod(string str)
    {            
        if (string.IsNullOrWhiteSpace(str))
        {
            return str;
        }
        var validAsciiCharecters = new List<int> { 200, 202, 216, 217, 218, 219, 221, 222, 223, 225, 227, 228, 230 };
        for (int i = 203; i <= 214; i++)
        {
            validAsciiCharecters.Add(i);
        }
        var win1256Bytes = Encoding.GetEncoding(1256).GetBytes(str);
        var newBytes = new List<byte>();
        foreach (var b in win1256Bytes)
        {
            if (validAsciiCharecters.Contains((int)b))
            {
                newBytes.Add(b);
            }
        }
        return Encoding.GetEncoding(1256).GetString(newBytes.ToArray());
    }
publicstaticstringcsharpmethod(stringstr)
{            
if(string.IsNullOrWhiteSpace(str))
{
返回str;
}
var VALIDASCIAICHARECERTS=新列表{200、202、216、217、218、219、221、222、223、225、227、228、230};
对于(int i=203;i
    public static string CSharpMethod(string str)
    {            
        if (string.IsNullOrWhiteSpace(str))
        {
            return str;
        }
        var validAsciiCharecters = new List<int> { 200, 202, 216, 217, 218, 219, 221, 222, 223, 225, 227, 228, 230 };
        for (int i = 203; i <= 214; i++)
        {
            validAsciiCharecters.Add(i);
        }
        var win1256Bytes = Encoding.GetEncoding(1256).GetBytes(str);
        var newBytes = new List<byte>();
        foreach (var b in win1256Bytes)
        {
            if (validAsciiCharecters.Contains((int)b))
            {
                newBytes.Add(b);
            }
        }
        return Encoding.GetEncoding(1256).GetString(newBytes.ToArray());
    }