2016-07-22 1 views
0

I wrote some code Опубликовать твиты в C#. Одна из вещей, что споткнулся меня был URL-кодирование данных, так как казалось, было много вариантов:Как кодировать url в Dart в формате, который ожидает API Twitter?

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, но ни один из них не выводит то же самое.

Код: (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)?

ответ

1

convert package работает отлично. Ранее была ошибка, вызывающая кодирование чисел, но a fix was merged и выпущенная сегодня в версии 2.0.1.

3

Я не могу найти функцию Дарта, которая эквивалентна C# EscapeDataString, но я думаю, что смог реализовать ее. Не стесняйтесь попробовать и узнайте, есть ли у вас какие-либо проблемы.

Смотреть это Dartpad: https://dartpad.dartlang.org/4336dad4dc0603952a7c2e545cb8726c

Он основан на том, что документы Dart говорит:

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

Так что функции я предоставил добавляет процент кодирования этих конкретных символов.

Как я понимаю, из документов C# на EscapeDataString он кодирует эти символы по умолчанию, тогда как никакая функция Дарта, которую я мог найти, не делает этого.

+0

Thanks; хотя я действительно удивлен, что нет встроенной версии. Кто-то указал мне на конвертируемый пакет, который ближе, за исключением того, что он терпит неудачу по номерам! https://github.com/dart-lang/convert/issues/3 –

Смежные вопросы