PDF 中的非 UTF-8 字符 Javascript Blob
Non UTF-8 characters in PDF Javascript Blob
我有一个从 WebApi 2 应用程序提供给 AngularJS 客户端的 PDF 文件。我使用 file-saver 然后将文件保存在客户端上,如下所示(在 TypeScript 中):
this.$http.get(`${webUrl}api/pdf?id=${fileDto.id}`)
.then((response: ng.IHttpPromiseCallbackArg<any>) => {
var file = new Blob([response.data], { type: 'application/pdf' });
saveAs(file, 'my.pdf');
});
我这样做的原因是我可以使用不记名令牌来授权访问 PDF(这是通过拦截器添加的)。这适用于 PDF 文件包含非 UTF8 字符时除外。在后一种情况下,文件仍在下载,但当我打开它时,它显示为空白。打开文件我可以看到非 UTF8 字符被替换为 □ 字符。在 JavaScript 中,当我在调试器中检查 response.data
的字符串值时,我看到这些字符由 � 表示。我的假设是否正确,因为文件是从 JavaScript 中的字符串写入的,无论我做什么,我都无法正确保存来自 JavaScript 的非 UTF8 字符的文件?
�
字符是 UTF-8 解析器在尝试解析非法 UTF-8 时插入的 Unicode Replacement Character \uFFFD
。
PDF 文件不是 UTF-8 字符串;它们是二进制文件。
要避免从 UTF-8 到 DOMstring (UTF-16) 的转换,请将配置设置为 responseType: 'blob'
:
var config = {responseType: 'blob'};
this.$http.get(`${webUrl}api/pdf?id=${fileDto.id}`, config)
.then((response: ng.IHttpPromiseCallbackArg<any>) => {
̶v̶a̶r̶ ̶f̶i̶l̶e̶ ̶=̶ ̶n̶e̶w̶ ̶B̶l̶o̶b̶(̶[̶r̶e̶s̶p̶o̶n̶s̶e̶.̶d̶a̶t̶a̶]̶,̶ ̶{̶ ̶t̶y̶p̶e̶:̶ ̶'̶a̶p̶p̶l̶i̶c̶a̶t̶i̶o̶n̶/̶p̶d̶f̶'̶ ̶}̶)̶;
var file = response.data;
saveAs(file, 'my.pdf');
});
有关详细信息,请参阅
我有一个从 WebApi 2 应用程序提供给 AngularJS 客户端的 PDF 文件。我使用 file-saver 然后将文件保存在客户端上,如下所示(在 TypeScript 中):
this.$http.get(`${webUrl}api/pdf?id=${fileDto.id}`)
.then((response: ng.IHttpPromiseCallbackArg<any>) => {
var file = new Blob([response.data], { type: 'application/pdf' });
saveAs(file, 'my.pdf');
});
我这样做的原因是我可以使用不记名令牌来授权访问 PDF(这是通过拦截器添加的)。这适用于 PDF 文件包含非 UTF8 字符时除外。在后一种情况下,文件仍在下载,但当我打开它时,它显示为空白。打开文件我可以看到非 UTF8 字符被替换为 □ 字符。在 JavaScript 中,当我在调试器中检查 response.data
的字符串值时,我看到这些字符由 � 表示。我的假设是否正确,因为文件是从 JavaScript 中的字符串写入的,无论我做什么,我都无法正确保存来自 JavaScript 的非 UTF8 字符的文件?
�
字符是 UTF-8 解析器在尝试解析非法 UTF-8 时插入的 Unicode Replacement Character \uFFFD
。
PDF 文件不是 UTF-8 字符串;它们是二进制文件。
要避免从 UTF-8 到 DOMstring (UTF-16) 的转换,请将配置设置为 responseType: 'blob'
:
var config = {responseType: 'blob'};
this.$http.get(`${webUrl}api/pdf?id=${fileDto.id}`, config)
.then((response: ng.IHttpPromiseCallbackArg<any>) => {
̶v̶a̶r̶ ̶f̶i̶l̶e̶ ̶=̶ ̶n̶e̶w̶ ̶B̶l̶o̶b̶(̶[̶r̶e̶s̶p̶o̶n̶s̶e̶.̶d̶a̶t̶a̶]̶,̶ ̶{̶ ̶t̶y̶p̶e̶:̶ ̶'̶a̶p̶p̶l̶i̶c̶a̶t̶i̶o̶n̶/̶p̶d̶f̶'̶ ̶}̶)̶;
var file = response.data;
saveAs(file, 'my.pdf');
});
有关详细信息,请参阅