Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AcroForm技术提交PDF表单时的数据编码_Pdf - Fatal编程技术网

使用AcroForm技术提交PDF表单时的数据编码

使用AcroForm技术提交PDF表单时的数据编码,pdf,Pdf,当我创建包含AcroForm格式(PDF字典,无XFA)文本字段的PDF表单(例如使用Acrobat)并将数据提交到服务器时,如何指定/检索将使用的编码 比如说。当我提交汉字字形的时候测试' (测试),我在服务器端收到以下标题和内容: accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/v

当我创建包含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是第一个glyph的GBK值,CAD4是第二个glyph的GBK值,但我无法从请求头中得出这一点

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


注意,我已经尝试过更改文本字段的默认字体(和编码)。我还搜索了ISO-32000-1中的字段编码,但我只找到了一种为复选框定义非拉丁字符的方法,以及一些关于FDF文件编码的信息。这些都没有回答我的问题。

我自己刚刚找到了我主要问题的答案。我在ISO-32000-1或ISO-32000-2草稿中没有找到任何内容,但通过研究Acrobat JavaScript参考,我找到了
cCharset
参数,该参数可用于
submitForm()
方法。该参数定义:

提交的值的编码。字符串值为utf-8, utf-16、轮班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-8、utf-16、, 班次JIS、BIG FIVE、GBK或UHC

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

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


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

您是使用提交操作还是使用javascript提交?我在规范(实现说明)中发现了以下短语,可能与这个问题有关:“因为JavaScript 1.2与Unicode不兼容,所以在JavaScript引擎解释之前,PDFDocencode和Unicode编码被转换为平台特定的编码。”我在PDF中创建了一个提交按钮,设置一些标志以将其作为POST(而不是GET)提交,等等。。。我不使用Javascript,但这并不意味着AdobeReader不在幕后使用Javascript。在任何情况下,响应都是编码的:标志符号作为%b2%e2和%ca%d4(标志符号的GBK值)发送到服务器。我的问题是:为什么不使用%6d%4b和%8b%d5(glyphs的Unicode值)?我想说的是,这些GBK值可能是“特定于平台的编码”,即“实现细节”在PDF规范的另一节中,我看到一个资源对象指定了编码,应该由阅读器添加到字段的DR条目中。也许您可以更改提交操作的标志,将整个文件发送到服务器,然后查看此资源对象。这可能有助于诊断问题。很好的了解,很好的问题和附带的答案。虽然这确实解决了Adobe Acrobat/Reader的问题,但对于PDF查看器来说,总体上仍然没有通用的解决方案。尽管如此,还是有一个好发现。我已经将此发送给Adobe和ISO委员会。我将尝试将此记录在ISO-32000-2中。@Lankymart谢谢,同时,ISO 32000-2已获得批准,并且字符集参数已添加到规范中。