1

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

4

2 に答える 2

5

C# に相当する Dart 関数が見つかりませんが、EscapeDataString実装できたと思います。気軽に試してみて、問題がないかどうかを確認してください。

このダートパッドを参照してください: https://dartpad.dartlang.org/4336dad4dc0603952a7c2e545cb8726c

これは、Dart docs が次のように述べているという事実に基づいています。

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

したがって、私が提供した関数は、これらの特定の文字のパーセント エンコーディングを追加します。

C#のドキュメントから理解しているようにEscapeDataString、デフォルトでこれらの文字をエンコードしますが、見つけることができるDart関数はありません。

于 2016-07-22T21:50:52.947 に答える
2

convert パッケージは完全に機能します。以前は数値がエンコードされるバグがありましたが、修正がマージされ、本日 2.0.1 でリリースされました。

于 2016-08-09T18:37:21.263 に答える