4

当我创建包含 AcroForm 格式(PDF 字典,无 XFA)的文本字段的 PDF 表单(例如使用 Acrobat),并将数据提交到服务器时,如何指定/检索将使用的编码?

例如。当我提交中文字形“测试”(测试)时,我在服务器端收到以下标头和内容:

accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
content-type: application/x-www-form-urlencoded
content-length: 23
acrobat-version: 10.1.4
user-agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C; AskTbCLA/5.15.1.22229)
accept-encoding: gzip, deflate
connection: Keep-Alive
Song=%b2%e2%ca%d4&Test=

除了 x-www-form-urlencoded 之外,没有对编码的引用。这两个字形表示为四个字节:B2 E2 CA D4。经过一番调查,我知道 B2E2 是第一个字形的 GBK 值,而 CAD4 是第二个字形的 GBK 值,但我无法从请求标头中得出这个。

总是GBK吗?我想通过在 PDF 的字典中设置特定键来更改数据编码,但似乎没有。例如:我想确保 PDF 始终发送 Unicode 字符而不是 GBK。

请注意,我已经通过更改文本字段的默认字体(和编码)进行了试验。我还在 ISO-32000-1 中搜索了字段中的编码,但我发现的只是一种为复选框定义非拉丁字符的方法,以及有关 FDF 文件编码的一些信息。没有一个回答我的问题。

4

1 回答 1

8

我刚刚自己找到了我的主要问题的答案。我在 ISO-32000-1 或 ISO-32000-2 草案中没有找到任何东西,但是研究了 Acrobat JavaScript 参考,我找到了cCharsetsubmitForm()方法可用的参数。该参数定义:

提交的值的编码。字符串值为 utf-8、utf-16、Shift-JIS、BigFive、GBK 和 UHC。如果未通过,则应用当前的 Acrobat 行为。对于基于 XML 的格式,使用 utf-8。对于其他格式,Acrobat 会尝试为要提交的值查找最佳主机编码。XFDF 提交忽略此值并始终使用 utf-8。

换句话说:在我的情况下,使用 GBK 是因为它最适合提交汉字。但是,可以通过使用submitForm()适当值的 JavaScript 方法来强制使用 UTF-8。

基于这个问题,我已经要求 ISO 委员会在 ISO-32000-2 中解决这个问题。结果,在第 12.7.6.2 节中标题为“特定于提交表单操作的附加条目”的表中添加了一个额外的可能条目:

字符集:字符串

(可选;可继承)可能的值包括:utf-8utf-16Shift-JISBigFiveGBKUHC

从 PDF 2.0 开始,这个问题将不再存在。

更新:我的建议是 ISO 32000-2(又名 PDF 2.0):

在此处输入图像描述

ISO 32000-1中不存在CharSet键;它是在 ISO 32000-2 中引入的。

于 2012-12-16T13:27:49.203 回答