Flutter Dart/FLATTER:URI/HTTPClient-禁用%的自动转义
我对dart/FLATTER URI实现有问题。 %将自动替换为%25 我想访问以下URL: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
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
中是否存在强制编码,从而避免了这个问题,这非常好!