我有一个单页面的应用程序,用于指定头部中带有“meta”标记的UTF-8字符集:
<head>
<meta charset="utf-8">
...
</head>
...
在应用内的“报告”页面上,我使用了一个表库,该表还将报告导出为CSV文件。此库使用HTML页面的charset作为导出的CSV文件的字符集,并且无法重新配置。但是,CSV文件需要由无法理解UTF-8的旧系统导入。
我试图用来克服这个问题的方法是每当我导航到报告页面或从报告页面导航时改变字符集(通过修改“元”标签) - 这样库就会导出到更容易接受的字符集。遗留应用程序。我尝试过像这样使用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中测试过)。尽管我更改了head
元素,但库仍然以UTF-8的形式导出。我曾想过将报告页面嵌入到iframe中,因此它可以从一开始就使用自己的编码,但这需要对页面及其资源进行大量重写。有没有人有其他想法?
感谢您的帮助。
更新:根据this page,我尝试过的方法永远不会奏效。谁能想到另一种选择?我只是想让库(angular-datatables)用不同的编码导出CSV。