Dart/Flutter:URI/HTTPClient - 禁用 % 的自动转义

Bri*_*one 6 uri http dart flutter

我在 dart/flutter URI 实现方面遇到问题。\n% 自动替换为 %25。

\n

我想访问以下 URL:\n http://some.domain/json.php?key=%DF [%DF=\xc3\x9f in ASCII/latin1]

\n

代码:

\n
    final uri = Uri.http('some.domain', 'json.php', {'key': '\xc3\x9f'});\n
Run Code Online (Sandbox Code Playgroud)\n

结果\n http://some.domain/json.php?key=%C3%9F [\xc3\x9f in UTF-8]

\n

当尝试时

\n
    final uri = Uri.http('some.domain', 'json.php', {'key': '%DF'});\n
Run Code Online (Sandbox Code Playgroud)\n

其结果是:\n http://some.domain/json.php?key=%25DF[% 自动转义为 %25]

\n

当尝试显式编码时:

\n
    final uri = Uri.http('some.domain', 'json.php',\n        {'key': Uri.encodeQueryComponent('\xc3\x9f', encoding: latin1)});      \n
Run Code Online (Sandbox Code Playgroud)\n

其结果是:\n http://some.domain/json.php?key=%25DF[% 自动转义为 %25]

\n

如何禁用 % 到 %25 的自动编码?!

\n

有任何想法吗?

\n

小智 5

queryParameters构造函数的参数需要Uri.http使用它自己的标准进行编码的未编码数据映射,因为在这种情况下您需要使用另一个标准可能更好地使用构造函数Uri并构建您自己的查询字符串并传递给query参数。

\n

像这样的事情应该可以解决问题:

\n
final uri = Uri(\n  scheme: \'http\',\n  host: \'some.domain\',\n  path: \'json.php\',\n  query: \'key=${Uri.encodeQueryComponent(\'\xc3\x9f\', encoding: latin1)}\'\n);\n
Run Code Online (Sandbox Code Playgroud)\n