C# でツイートを投稿するコードを書きました。多くのオプションがあるように見えたので、私をつまずかせたものの1つはデータのURLエンコードでした:
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
私は今、ダートで同じことをしようとしています。Uri クラスのすべてのエンコード メソッドを試しましたが、同じものを出力するものはないようです。
コード: (ダーツパッド)
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!"));
出力:
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!
最後の 1 つ ( encodeComponent
) が最も近いように見えますが、感嘆符だけが間違っています。
私が必要とするようにこのエンコーディングを行う既存の方法はありますか (C# と同じEscapeDataString
)?