首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VB6与.NET编码问题(阿拉伯语查韦斯)

VB6与.NET编码问题(阿拉伯语查韦斯)
EN

Stack Overflow用户
提问于 2018-10-28 06:54:10
回答 1查看 111关注 0票数 2

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

代码语言:javascript
运行
复制
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

当我转换成快速 C#版本时,

代码语言:javascript
运行
复制
    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 newStr = "";
        foreach (var ch in str)
        {
            if (validAsciiCharecters.Contains((int)ch))
            {
                newStr += ch.ToString();
            }
        }
        return newStr;
    }

VB6输入م سلطانة和输出مسلطن。在我发现的VB6内部挖掘后,

在我找到的记事本中复制粘贴这些值时,

在C#中,(int)'Ê'等于202,在VB 6中,Asc("ت")是202。但问题是,如果我用输入C#调用م سلطانة函数,就会得到错误的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-28 07:15:41

在做了大量的研究之后,我发现了这个Decoding an UTF-8 string to Windows-1256,它可以帮助我通过稍微的调整来解决问题,

代码语言:javascript
运行
复制
    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());
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53029081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档