2013-07-08 2 views
3

У меня есть кнопка в моем расширение, которое вызывает следующий код:Консерванты символы новой строки в данных: текст URI

chrome.tabs.create({url: 'data:text;base64,'+btoa(data), active:false}); 

Это вызывает загрузку моей строки (данные), как я ожидал. К сожалению, это, кажется, зачистка символов новой строки.

Я пробовал другие методы кодирования, включая utf-8 и функцию encodeUri(). Я также попытался переключить mimetype на data:text/plain, но это просто открывается на новой вкладке (с правильными символами новой строки) вместо загрузки.

Есть ли способ кодирования моего текста, чтобы символы новой строки сохранялись? Если нет, существует ли другой способ запуска загрузки файлов в браузере?

редактировать

Я обнаружил, что новые строки появляются в некоторых текстовых редакторах. Раньше я использовал блокнот, который не распознавал символы новой строки из хром, но мой другой текстовый редактор (notepad ++), кажется, их распознает

ответ

5

Мое рекомендованное решение состоит в том, чтобы не использовать Блокнот, Линейные форматы Windows. Если вы все еще хотите использовать Блокнот с вашим выходом, replace все линии (0x0A) с парами возврата каретки + линии (0x0D 0x0A).

chrome.tabs.create({ 
    url: 'data:text;base64,' + btoa(data.replace(/\n/g, '\r\n')), 
    active: false 
}); 
+0

Не могу поверить, что я забыл о \ r. Благодаря! – MrGlass

-1

Для всех, кто пытается сохранить символы новой строки в данных URI без шифрования base64: это невозможно, вы должны использовать кодировку base64.

+1

Этот ответ неверный, возможно иметь символы новой строки без кодировки base64 через URL-кодированные URL-адреса. Например: 'data: text/html,

a%0A%0Db
' –

+0

Также base64 кодирует, а не шифрует. – MrGlass

+0

Собственно, это правильный ответ. Вопрос был о text/plain, NOT text/html. text/plain НЕ поддерживает символы новой строки, вы должны закодировать его base64. – CpnCrunch