使用AcroForm技术提交PDF表单时的数据编码
当我创建包含AcroForm格式(PDF字典,无XFA)文本字段的PDF表单(例如使用Acrobat)并将数据提交到服务器时,如何指定/检索将使用的编码 比如说。当我提交汉字字形的时候测试' (测试),我在服务器端收到以下标题和内容:使用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
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已获得批准,并且字符集参数已添加到规范中。