1

写了一些代码来用 C# 发布推文。让我绊倒的一件事是数据的 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

我现在正试图在 Dart 中做同样的事情。我已经尝试了 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!

最后一个 ( encodeComponent) 似乎最接近,只是感叹号是错误的。

是否有按照我的要求进行这种编码的现有方法(与 C# 相同EscapeDataString)?

4

2 回答 2

5

我找不到与 C# 等效的 Dart 函数EscapeDataString,但我认为我能够实现一个。随意尝试一下,看看是否发现任何问题。

看到这个飞镖垫: https ://dartpad.dartlang.org/4336dad4dc0603952a7c2e545cb8726c

这是基于 Dart 文档说的事实:

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

所以我提供的函数增加了这些特定字符的百分比编码。

正如我从 C# 文档中了解到的EscapeDataString那样,默认情况下确实对这些字符进行了编码,而我找不到 Dart 函数可以做到这一点。

于 2016-07-22T21:50:52.947 回答
2

转换包完美运行。以前有一个错误导致数字被编码,但今天在 2.0.1中合并并发布了一个修复程序。

于 2016-08-09T18:37:21.263 回答