C# VB6与.NET编码问题(阿拉伯文字符)
我正在将一个现有的VB6应用程序移植到.NET(C#7)。当前正在为创建问题的VB 6函数很简单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
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());
}