visual c# 到 visual basic 编码

visual c# to visual basic encoded

我正在尝试用 visual basic .net (v. 2008) 编写下一个 API 用 C# 编写的代码。 在visual basic中应该如何?

private static string UrlEncode(string url)
    {
        StringBuilder encoded = new StringBuilder(url.Length * 2);
        string unreservedChars = String.Concat(ValidUrlCharacters, ValidPathCharacters);
        foreach (char symbol in System.Text.Encoding.UTF8.GetBytes(url))
        {
            if (unreservedChars.IndexOf(symbol) != -1)
            {
                encoded.Append(symbol);
            }
            else
            {
                encoded.Append("%").Append(string.Format(CultureInfo.InvariantCulture, "{0:X2}", (int)symbol));
            }
        }
        return encoded.ToString();
    }

我已经尝试了下一个代码,但它不起作用。它不返回字符,并且在字符串 unreservedChars 中找不到它。

该代码适用于 C#。

Private Shared Function UrlEncode(ByVal url As String) As String
        Dim encoded As New StringBuilder(url.Length * 2)
        Dim unreservedChars As String = String.Concat(ValidUrlCharacters, ValidPathCharacters)

        For Each Symbol As String In System.Text.Encoding.UTF8.GetBytes(url)
            If unreservedChars.IndexOf(Symbol) <> -1 Then
                encoded.Append(Symbol)
            Else
                encoded.Append("%").Append(String.Format(CultureInfo.InvariantCulture, "{0:X2}", CInt(Symbol)))
            End If
        Next

        Return encoded.ToString()
    End Function

您应该完全摆脱它并调用 Uri.EscapeUriStringUri.EscapeDataString,具体取决于您的实际需要。

您的 VB 版本有两个问题 - 您使用 'String' 作为迭代变量而不是 'Char',而不是 'CInt' 您应该使用 'AscW' 从 'Char' 到 'Integer':

Private Shared Function UrlEncode(ByVal url As String) As String
    Dim encoded As New StringBuilder(url.Length * 2)
    Dim unreservedChars As String = String.Concat(ValidUrlCharacters, ValidPathCharacters)
    For Each bytesymbol As Byte In System.Text.Encoding.UTF8.GetBytes(url)
        Dim symbol As Char = ChrW(bytesymbol)
        If unreservedChars.IndexOf(symbol) <> -1 Then
            encoded.Append(symbol)
        Else
            encoded.Append("%").Append(String.Format(CultureInfo.InvariantCulture, "{0:X2}", AscW(symbol)))
        End If
    Next bytesymbol
    Return encoded.ToString()
End Function