3

У меня есть приложение одной страницы, которая определяет кодировку UTF-8 с «мета» метки в голове:изменениями- Charset с Javascript

<head> 
    <meta charset="utf-8"> 
    ... 
</head> 
... 

На странице «Отчеты» в приложении, я используйте библиотеку таблиц, которая также экспортирует отчет в виде файла CSV. Эта библиотека использует кодировку HTML-страницы в качестве кодировки для экспортированного CSV-файла, и это невозможно переконфигурировать. Однако файл CSV необходимо импортировать с помощью устаревшей системы, которая не может понять UTF-8.

Подход, который я попытался использовать для преодоления этой проблемы, заключается в изменении кодировки (путем изменения тега meta) при каждом переходе на страницу отчетов с нее - таким образом, библиотека будет экспортировать в кодировку более приемлемой к устаревшему приложению. Я попытался с помощью angularjs и ng-if так:

<head ng-controller="NavigationController"> 
    <meta ng-if="!onReportsPage" charset="utf-8"> 
    <meta ng-if="onReportssPage" charset="windows-1252"> 
    ... 
</head> 

Я также пытался вручную удалить/добавления мета-тегов, как это:

<head id="head"> 
    <meta id="charset" charset="utf-8"> 
    ... 
</head> 

...

// called when navigating to the "reports" page 
var head = document.getElementById('head'); 
var oldCharsetTag = document.getElementById('charset'); 
head.removeChild(oldCharsetTag); 
var newCharsetTag = document.createElement('meta'); 
newCharsetTag.setAttribute('id', 'charset'); 
newCharsetTag.setAttribute('charset', 'windows-1252'); 
head.appendChild(newCharsetTag); 
... 
// called when navigating away from the "reports" page (similar) 
... 
newCharsetTag.setAttribute('charset', 'utf-8'); 
... 

Из углового/javascript POV кодировка, кажется, успешно изменена в DOM, однако ни один из методов не работает (я тестировал в Chrome). Библиотека по-прежнему экспортируется как UTF-8, хотя я изменил элемент head. Я думал о встраивании страницы отчетов в iframe, поэтому он может использовать свою собственную кодировку с самого начала, но для этого потребуется большая переработка страницы и ее ресурсов. У кого-нибудь есть другие идеи?

Спасибо за помощь.

ОБНОВЛЕНИЕ: согласно this page, подход, который я пробовал, никогда не будет работать. Может ли кто-нибудь подумать об альтернативе? Я просто хочу, чтобы библиотека (угловые-datatables) экспортировала CSV с другой кодировкой.

+0

Как насчет размещения отчетов в iframe с метатегом с новой кодировкой? – neilsimp1

+0

@ neilsimp1: Я подумал об этом, но для внесения изменений в страницу «Отчеты» потребуются значительные изменения, чтобы заставить его работать независимо. Я надеюсь, что есть решение, в котором меньше работы. –

ответ

0

Фактически csvHtml5 является единственной функцией экспорта DT, которая поддерживает кодировки. См. docs. Значение по умолчанию: null, т.е. кодировка наследует кодировку документов. Для того, чтобы использовать его вместе с угловым DataTables использовать

.withButtons([ 
    { 
    extend: 'csvHtml5', 
    charset: 'windows-1252', 
    //..other options 
    } 
]) 

NB: Это не недавно представила функция, но восходит, когда кнопки заменены TableTools, никаких обновлений не должны быть необходимы для любого. Просто увидел этот вопрос при просмотре оставшихся без ответа вопросов ...