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

Flutter Dart/FLATTER:URI/HTTPClient-禁用%的自动转义,flutter,http,dart,uri,Flutter,Http,Dart,Uri,我对dart/FLATTER URI实现有问题。 %将自动替换为%25 我想访问以下URL: http://some.domain/json.php?key=%DF[%DF=ßASCII/latin1] 守则: final uri = Uri.http('some.domain', 'json.php', {'key': 'ß'}); 导致 http://some.domain/json.php?key=%C3%9F[在UTF-8中] 尝试时 final uri = Uri.h

我对dart/FLATTER URI实现有问题。 %将自动替换为%25

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

守则:

    final uri = Uri.http('some.domain', 'json.php', {'key': 'ß'});
导致
http://some.domain/json.php?key=%C3%9F
[在UTF-8中]

尝试时

    final uri = Uri.http('some.domain', 'json.php', {'key': '%DF'});
其结果是:
http://some.domain/json.php?key=%25DF
[%自动转义到%25]

尝试显式编码时:

    final uri = Uri.http('some.domain', 'json.php',
        {'key': Uri.encodeQueryComponent('ß', encoding: latin1)});      
其结果是:
http://some.domain/json.php?key=%25DF
[%自动转义到%25]

我怎样才能禁用%到%25的自动编码


有什么想法吗?

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

像这样的事情应该可以做到:

final uri=uri(
方案:“http”,
主机:“some.domain”,
路径:“json.php”,
查询:“key=${Uri.encodeQueryComponent('ß',编码:latin1)}”
);

如果您已经知道编码的URL,只需使用:

var uri=uri.parse('http://some.domain/json.php?key=%DF');
Uri.parse
比直接使用
Uri.http
/
Uri.https
简单得多,也不容易出错。避免使用这些工具,并向任何指示您使用它们的人投诉。

是的!:)非常感谢您的快速支持,它很有效。我花了2个小时对dart核心代码进行了一次短时间的深入调试,以查看
queryParameters
中是否存在强制编码,从而避免了这个问题,这非常好!