JavaScript blob 编码为 UTF-8 而不是 ANSI
JavaScript blob encoding as UTF-8 instead of ANSI
我使用 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)(É 的字符值)
- 更改和删除 blob 本身的 "type" 到我发现的几个不同示例(抱歉,我没有跟踪所有不同的组合)。
谁能提出不同的解决方案?
您可以将数据表示为二进制,只需运行通过字符串并填充一个二进制数组
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 uint8 = new Uint8Array(FDF_Text.length);
for (var i = 0; i < uint8.length; i++){
uint8[i] = FDF_Text.charCodeAt(i);
}
var blobObject = new Blob([uint8], {type: 'text/fdf'});
window.navigator.msSaveOrOpenBlob(blobObject, 'MY_FDF.fdf');
我使用 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)(É 的字符值)
- 更改和删除 blob 本身的 "type" 到我发现的几个不同示例(抱歉,我没有跟踪所有不同的组合)。
谁能提出不同的解决方案?
您可以将数据表示为二进制,只需运行通过字符串并填充一个二进制数组
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 uint8 = new Uint8Array(FDF_Text.length);
for (var i = 0; i < uint8.length; i++){
uint8[i] = FDF_Text.charCodeAt(i);
}
var blobObject = new Blob([uint8], {type: 'text/fdf'});
window.navigator.msSaveOrOpenBlob(blobObject, 'MY_FDF.fdf');