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.EscapeUriString
或 Uri.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
我正在尝试用 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.EscapeUriString
或 Uri.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