I wrote some code um Tweets in C# zu posten. Eines der Dinge, die mir gestolpert war die URL-Kodierung von Daten, da es schien viele Möglichkeiten zu sein:Wie url-codiere ich Dart in dem Format, das die Twitter-API erwartet?
var input = "Hello Ladies + Gentlemen, a signed OAuth request!";
var expected = "Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21";
Console.WriteLine(WebUtility.UrlEncode(input) == expected); // False
Console.WriteLine(Uri.EscapeUriString(input) == expected); // False
Console.WriteLine(Uri.EscapeDataString(input) == expected); // True
ich jetzt versuchen, die gleiche Sache in Dart zu tun. Ich habe alle Codierungsmethoden in der Uri-Klasse ausprobiert, aber keine scheint die gleiche Ausgabe zu geben.
Code: (DartPad)
print(Uri.encodeQueryComponent("Hello Ladies + Gentlemen, a signed OAuth request!"));
print(Uri.encodeFull("Hello Ladies + Gentlemen, a signed OAuth request!"));
print(Uri.encodeComponent("Hello Ladies + Gentlemen, a signed OAuth request!"));
Ausgang:
Hello+Ladies+%2B+Gentlemen%2C+a+signed+OAuth+request%21
Hello%20Ladies%20+%20Gentlemen,%20a%20signed%20OAuth%20request!
Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request!
Die letzte (encodeComponent
) scheint in der Nähe, nur das Ausrufezeichen falsch ist.
Gibt es eine existierende Methode, die diese Kodierung durchführt, wie ich es benötige (das gleiche wie C# EscapeDataString
)?
Danke; obwohl ich wirklich überrascht bin, gibt es keine integrierte Version. Jemand hat mich auf das Convert-Paket hingewiesen, das näher ist, außer dass es an Zahlen scheitert! https://github.com/dart-lang/convert/issues/3 –