Как URL кодировать обратную косую черту с помощью R/RCurl

В настоящее время я пытаюсь закодировать строку для вставки в URL. Моя проблема в том, что это, кажется, не работает, когда моя строка содержит обратную косую черту. Я уже пробовал 4 подхода с использованием функций URLencode, curlEscape (из RCurl) и curlPercentEncode (из RCurl), но ни один из них не был успешным.

> URLencode("hello\hello")
Error: '\h' is an unrecognized escape in character string starting ""hello\h"
> curlEscape("hello\hello")
Error: '\h' is an unrecognized escape in character string starting ""hello\h"
> curlPercentEncode("hello\hello")
Error: '\h' is an unrecognized escape in character string starting ""hello\h"
> curlPercentEncode("hello\hello", amp=TRUE)
Error: '\h' is an unrecognized escape in character string starting ""hello\h"

1 ответ

Решение

Ты ищешь

> URLencode("hello\\hello")
[1] "hello%5chello"

Ошибка, которую вы получаете, не от какой-либо функции, которую вы пытались вызвать; это не получилось так далеко, как на самом деле позвонить любому из них. Ошибка от парсера R. Обратная косая черта - это специальный символ для самих строковых литералов, поэтому вам нужно написать двойной обратный слеш в строковом литерале, чтобы получить строковое значение, содержащее обратную косую черту. (Есть несколько других вещей, которые вы можете поставить после обратной косой черты; например, "\"" это то, как вы пишете строковое значение, состоящее из одного символа двойной кавычки. Читать ?Quotes для дополнительной информации.)

Поскольку это проблема синтаксиса строковых литералов, он не должен появляться, если вы читаете "строку для вставки в URL" из источника данных; это должно быть проблемой, только если вам нужно написать эту строку прямо в вашем коде.

Другие вопросы по тегам