提交的字符编码——_charset_隐藏字段

Posted

技术标签:

【中文标题】提交的字符编码——_charset_隐藏字段【英文标题】:Submitted character encoding -- _charset_ hidden field 【发布时间】:2011-03-10 17:02:02 【问题描述】:

对于我们的网络应用程序,我们有多个包含文本区域的 html 页面。我们所有的页面都使用 ISO-8859-1 字符集呈现。当在 Windows 机器上通过 IE6 访问页面并将“智能引号”等特殊字符复制到文本区域时,我们的某些页面使用 Windows 1252 字符编码提交页面。在其他情况下,页面似乎使用 UTF-8 字符编码提交。我一直在使用以下隐藏字段跟踪提交字符编码:

<input type="hidden" name="_charset_" />

在 Windows 1252 提交字符编码页面上,我们收到“windows-1252”的值。

在 UTF-8 提交字符编码页面上,我们收到一个空白值。

在后端,我们使用的是 ISO-8859-1。虽然理想情况下我们希望提交字符编码,但我看不到在 IE 6 上强制执行该行为的选项。鉴于在 Windows 1252 和 UTF-8 之间进行选择,我希望在 Windows 1252 中提交内容,这样更有可能当页面以 ISO-8859-1 重新呈现时正确呈现。

我已经深入研究了我们的页面,但没有什么让我觉得有些页面以一种字符编码提交的原因。

1) 当 IE 6 返回一个空白 charset 时,这实际上等同于 UTF-8 吗?当提交字符编码为 UTF-8 时,IE 6 是否总是返回空白字符集,还是仅在无法正确确定使用何种字符编码时?

2) 页面上可能存在哪些差异会导致 IE 6 在某些页面上选择 Windows 1252 而在其他页面上选择 UTF-8?我在页面上扫描了 UTF-8 字符和任何接受字符集属性,但都找不到。

补充说明:我在以下链接中找到了关于charset隐藏输入的信息。

http://web.archive.org/web/20060427015200/ppewww.ph.gla.ac.uk/~flavell/charset/form-i18n.html

【问题讨论】:

您的 HTML 表单上是否有“charset=...”属性?如果没有,请尝试添加一个。 我尝试使用“windows-1252”和“iso-8859-1”在表单上提供“accept-charset”。这似乎对行为没有任何影响。这可能是 IE (reference.sitepoint.com/html/form/accept-charset) 对该属性的“错误”支持的结果。 【参考方案1】:

MSDN 声明 IE 仅接受“utf-8”作为此属性的值。

【讨论】:

这里要明确一点:_charset_表单域是客户端浏览器在向服务器提交表单时填写的。这不是客户指定的。

以上是关于提交的字符编码——_charset_隐藏字段的主要内容,如果未能解决你的问题,请参考以下文章

字符集与编码01--charset vs encoding

UTF-8编码与GBK编码下的字符长度

00093_转换流

UnicodeEncodeError:'mbcs'编解码器无法编码位置0--1中的字符:运行PyInstaller编译的脚本时无效字符

字符集和字符编码(Charset & Encoding)

String构造方法带字符编码集的作用