【发布时间】:2015-12-07 05:40:00
【问题描述】:
我使用 JavaScript blob 创建一个 FDF 文件,该文件打开并填充本地存储的 PDF。
但是,本地存储的 PDF 的文件路径包含重音字符(我无法编辑文件夹名称)。
当文件夹路径不包含重音符号并且我在记事本中打开 fdf 时,此代码有效,默认编码为 ANSI。但是,当文件夹路径包含重音符号时,FDF 会打开一条消息,指出无法找到 PDF。此外,记事本中的默认编码已更改为 UTF-8。
FDF_Text = ''
+ '%FDF-1.2' + "\n"
+ '1 0 obj<</FDF<</F(T:/Échange/MY_PDF.pdf)/Fields 2 0 R>>>>' + "\n"
+ 'endobj' + "\n"
+ '2 0 obj[' + "\n"
+ '<</T(FIELD_NAME)/V(SOME_TEXT)>>' + "\n"
+ ']' + "\n"
+ 'endobj' + "\n"
+ 'trailer' + "\n"
+ '<</Root 1 0 R>>' + "\n"
+ '%%EO'
var blobObject = new Blob([FDF_Text], {type: 'text/css;charset=ANSI'});
window.navigator.msSaveOrOpenBlob(blobObject, 'MY_FDF.fdf');
我试过了
- 用 E 替换 É
- 使用 String.fromCharCode(201)(É 的 chr 值)
- 将 blob 本身的“类型”更改并删除为我发现的几个不同示例(抱歉,我没有跟踪所有不同的组合)。
谁能提出不同的解决方案?
【问题讨论】:
-
该文件路径的工作 FDF 看起来如何(无论您如何构建/下载它)?
-
看起来一模一样。我刚刚测试了 2 个相同的 FDF 文件,它们保存到我计算机上的一个文件夹中,文件路径中都带有“É”。在记事本中并排打开时,它们看起来相同,并且“É”字符没有损坏。唯一的区别是另存为一个显示 UTF-8 和另一个 ANSI 的编码。运行 UTF-8 版本会给出消息,说明找不到文件。运行 ANSI 版本可以完美运行。
-
charset=ANSI是什么,有效吗? Which one 你的意思是? -
我不确定它是否有效。我在任何地方都找不到有效的 blob 第二个参数列表。我使用 ASCII、ISO/IEC 8859 和 Windows-1252 运行了一些测试,但没有运气。我不知道该参数究竟做了什么,因为我也尝试删除它以及输入乱码。没有不同。我采用的解决方案很糟糕,但很有效:New Blob 创建了一个 vbs(用户必须在打开时单击一个额外的安全警告),vbs 将 FDF 写入本地驱动器,然后执行它。 FDF 在本地写入时,会保存为记事本的默认编码。在这种情况下,即 ANSI。
-
Blob 类型似乎与 HTTP
content-type标头 (as documented) 匹配,因此您应该尝试其有效值(ISO-8859-1似乎也很常见)。无论如何,我想您的问题实际上是您正在从“DOM 字符串”构建 Blob,该字符串本质上编码为 UTF-16,并以这种方式写入 Blob 的缓冲区。
标签: javascript encoding utf-8 blob ansi