.net UrlEncode – Kleinbuchstabe

Ich arbeite an einer Datenübertragung für ein Gateway, das erfordert, dass ich Daten in UrlEncoded Formular sende. Der UrlEncode von .net erstellt jedoch Kleinbuchstaben und bricht die Übertragung ab (Java erstellt Großbuchstaben).

Irgendwelche Gedanken, wie kann ich .net zwingen, UrlEncoding in Großbuchstaben zu machen?

update1:

.net heraus:

dltz7UK2pzzdCWJ6QOvWXyvnIJwihPdmAioZ%2fENVuAlDQGRNCp1F 

gegenüber Java:

 dltz7UK2pzzdCWJ6QOvWXyvnIJwihPdmAioZ%2FENVuAlDQGRNCp1F 

(Es ist eine base64d 3DES Zeichenfolge, ich muss es beibehalten).

Ich denke, dass Sie mit dem, was C # Ihnen gibt, stecken bleiben, und Fehler zu erhalten, deutet auf eine schlecht implementierte UrlDecode-function auf der anderen Seite hin.

Mit diesem Argument sollten Sie nur die Zeichenfolge und Großbuchstaben nur die zwei Zeichen durchlaufen, die einem% -Zeichen folgen. Dadurch bleiben Ihre base64-Daten intakt, während die codierten Zeichen in das richtige Format umgewandelt werden:

 public static string UpperCaseUrlEncode(string s) { char[] temp = HttpUtility.UrlEncode(s).ToCharArray(); for (int i = 0; i < temp.Length - 2; i++) { if (temp[i] == '%') { temp[i + 1] = char.ToUpper(temp[i + 1]); temp[i + 2] = char.ToUpper(temp[i + 2]); } } return new string(temp); } 

Ersetzen Sie die Codierung in Kleinbuchstaben von HttpUtility.UrlEnocde durch eine Regex:

 static string UrlEncodeUpperCase(string value) { value = HttpUtility.UrlEncode(value); return Regex.Replace(value, "(%[0-9a-f][0-9a-f])", c => c.Value.ToUpper()); } var value = "SomeWords 123 #=/ äöü"; var encodedValue = HttpUtility.UrlEncode(value); // SomeWords+123+%23%3d%2f+%c3%a4%c3%b6%c3%bc var encodedValueUpperCase = UrlEncodeUpperCase(value); // now the hex chars after % are uppercase: // SomeWords+123+%23%3D%2F+%C3%A4%C3%B6%C3%BC 

Ich weiß, das ist sehr alt und vielleicht gab es diese Lösung nicht, aber das war eine der obersten Seiten, die ich bei Google gefunden habe, als ich versuchte, dies zu lösen.

 System.Net.WebUtility.UrlEncode(posResult); 

Dies codiert in Großbuchstaben.

Das ist sehr einfach


Regex.Replace( encodedString, @"%[af\d]{2}", m => m.Value.ToUpper() ) 

Dh ersetzen Sie alle Hex-Buchstaben-Ziffern-Kombinationen in Großbuchstaben

Wenn jemand anderes hier nach Perl-Code oder einem PCRE (Perl-kompatiblen regulären Ausdruck) sucht, um das Problem zu lösen, ist ein (Kandidat für den kürzest möglichen) Perl-Ausdruck, um die URL-Kodierung in Kleinbuchstaben umzuwandeln:

 s/%(\X{2})/%\L$1\E/go 

und umgekehrt (Kleinbuchstaben zu Großbuchstaben)

 s/%(\x{2})/%\U$1\E/go 

Dies ist der Code, den ich in einer Twitter-Anwendung für OAuth verwende …

  Public Function OAuthUrlEncode(ByVal value As String) As String Dim result As New StringBuilder() Dim unreservedChars As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~" For Each symbol As Char In value If unreservedChars.IndexOf(symbol) <> -1 Then result.Append(symbol) Else result.Append("%"c + [String].Format("{0:X2}", AscW(symbol))) End If Next Return result.ToString() End Function 

Hoffe das hilft!

Hier ist meine VB.NET-Konvertierung der öffentlichen OAuth.OAuthBase Version von UrlEncode (für .NET 2.0 / 3.5):

 ' MEH: Made this ReadOnly because the range of unreserved characters is specified in the OAuth spec. Inheritors ought not change it. Protected Shared ReadOnly unreservedChars As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~" ' MEH: Added. These are the other characters HttpUtility.UrlEncode does not convert to percent encoding itself. Protected Shared ReadOnly reservedChars As String = " !'()*" ' If this moves to .NET 4+ ' can be removed. '''  ''' This is a different Url Encode implementation since the default .NET one outputs the percent encoding in lower case. ''' While this is not a problem with the percent encoding spec, it is used in upper case throughout OAuth. ''' Also the OAuth spec explicitly requires some characters to be unencoded. '''  ''' The value to Url encode ''' Returns a Url encoded string '''  ''' 140313 MEH Fixed to correctly cater for any characters between %80 and %ff, and the O(n^2) IndexOf call. '''  Public Shared Function UrlEncode(ByVal Value As String) As String Dim result, buffer As New StringBuilder() For Each symbol As Char In Value If unreservedChars.IndexOf(symbol) <> -1 Then UrlEncodeAppendClear(result, buffer).Append(symbol) ElseIf reservedChars.IndexOf(symbol) = -1 Then 'some symbols produce 2 or more octets in UTF8 so the system urlencoder must be used to get the correct data ' but this is best done over a full sequence of characters, so just store this one in a buffer. buffer.Append(symbol) Else ' These characters are not converted to percent encoding by UrlEncode. UrlEncodeAppendClear(result, buffer).AppendFormat(Globalization.CultureInfo.InvariantCulture, "%{0:X2}", AscW(symbol)) End If Next UrlEncodeAppendClear(result, buffer) Return result.ToString() End Function Private Shared percentHex As New RegularExpressions.Regex("(%[0-9a-f][0-9a-f])", RegularExpressions.RegexOptions.Compiled) '''  ''' Actually performs the UrlEncode on any buffered characters, ensuring the resulting percents are uppercased and clears the buffer. '''  ''' ''' The result of the UrlEncode is appended here. ''' The current buffer of characters to be encoded. Cleared on return. ''' ''' The Result, as passed in, with the UrlEncoding of the buffer of characters appended. ''' ''' Would like to be an extension method. ''' '''  ''' 140313 MEH Created. '''  Private Shared Function UrlEncodeAppendClear(ByVal Result As StringBuilder, ByVal Buffer As StringBuilder) As StringBuilder If Buffer.Length > 0 Then Result.Append(percentHex.Replace(HttpUtility.UrlEncode(Buffer.ToString), Function(c) c.Value.ToUpperInvariant())) Buffer.Length = 0 End If Return Result End Function