我如何 url 在 Dart 中以 Twitter API 期望的格式进行编码?
How do I url-encode in Dart in the format that the Twitter API expects?
我在 C# 中 wrote some code 到 post 推文。让我感到困惑的一件事是数据的 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 class 中的所有编码方法,但 none 似乎输出相同。
代码:(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!"));
输出:
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
相同)?
我找不到与 C# 的 EscapeDataString
等效的 Dart 函数,但我认为我能够实现一个。随意尝试一下,看看是否发现任何问题。
查看此 Dartpad:
https://dartpad.dartlang.org/4336dad4dc0603952a7c2e545cb8726c
它基于 Dart 文档所说的事实:
All characters except uppercase and lowercase letters, digits and the characters -_.!~*'() are percent-encoded.
所以我提供的函数添加了那些特定字符的百分比编码。
据我从 EscapeDataString
上的 C# 文档中了解到,它确实默认对这些字符进行编码,而我找不到的 Dart 函数会这样做。
convert package works perfectly. There was previously a bug causing numbers to be encoded but a fix was merged 并于今天发布 2.0.1.
我在 C# 中 wrote some code 到 post 推文。让我感到困惑的一件事是数据的 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 class 中的所有编码方法,但 none 似乎输出相同。
代码:(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!"));
输出:
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
相同)?
我找不到与 C# 的 EscapeDataString
等效的 Dart 函数,但我认为我能够实现一个。随意尝试一下,看看是否发现任何问题。
查看此 Dartpad: https://dartpad.dartlang.org/4336dad4dc0603952a7c2e545cb8726c
它基于 Dart 文档所说的事实:
All characters except uppercase and lowercase letters, digits and the characters -_.!~*'() are percent-encoded.
所以我提供的函数添加了那些特定字符的百分比编码。
据我从 EscapeDataString
上的 C# 文档中了解到,它确实默认对这些字符进行编码,而我找不到的 Dart 函数会这样做。
convert package works perfectly. There was previously a bug causing numbers to be encoded but a fix was merged 并于今天发布 2.0.1.