gpt4 book ai didi

angularjs - PDF Javascript Blob 中的非 UTF-8 字符

转载 作者:行者123 更新时间:2023-12-02 22:49:09 26 4
gpt4 key购买 nike

我有一个 PDF 文件,我从 WebApi 2 应用程序向 AngularJS 客户端提供该文件。我用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');
});

我这样做的原因是我可以使用不记名 token 来授权对 PDF 的访问(这是通过拦截器添加的)。除非 PDF 文件包含非 UTF8 字符,否则此方法有效。在后一种情况下,文件仍然会下载,但当我打开它时,它显示为空白。打开文件,我可以看到非 UTF8 字符被替换为 □ 字符。在 JavaScript 中,当我在调试器中检查 response.data 的字符串值时,我发现这些字符由 � 表示。我的假设是否正确,因为文件是从 JavaScript 中的字符串写入的,所以无论我做什么,我都无法正确保存 JavaScript 中包含非 UTF8 字符的文件?

最佳答案

字符是 Unicode Replacement Character \uFFFD当 UTF-8 解析器尝试解析非法 UTF-8 时会插入该文件。

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');
});

欲了解更多信息,请参阅

关于angularjs - PDF Javascript Blob 中的非 UTF-8 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42984390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com