2016-07-22 19 views
0

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)?

Antwort

1

Die convert package funktioniert perfekt. Es gab zuvor einen Fehler, der dazu führte, dass Zahlen kodiert wurden, aber a fix was merged und heute in 2.0.1 veröffentlicht wurden.

3

Ich kann keine Dart - Funktion finden, die C# EscapeDataString entspricht, aber ich denke, dass ich in der Lage war, eine zu implementieren. Fühlen Sie sich frei, es zu versuchen und sehen Sie, wenn Sie irgendwelche Probleme finden.

Sehen Sie diese Dartpad: https://dartpad.dartlang.org/4336dad4dc0603952a7c2e545cb8726c

Es basiert auf der Tatsache ist, dass die Dart-Dokumentation sagt:

All characters except uppercase and lowercase letters, digits and the characters -_.!~*'() are percent-encoded.

So sind die Funktionen, die ich fügt Codierung dieser spezifischen Zeichen Prozent zur Verfügung gestellt.

Wie ich es aus der C# -Docs auf EscapeDataString verstehe, codiert es diese Zeichen standardmäßig, während keine Dart-Funktion, die ich finden konnte, das tut.

+0

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 –