关于Web中字符编码的问题

时间:2009-09-02 14:02:46

标签: asp.net jsp character-encoding

假设我有一个JSP页面(我只列出其中一部分,请不要介意):

<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<form>  
         <input type=input>   
         </input>
    中華<!--character with BIG5 encoding>
</form>

并且在服务器端我使用此request.setCharacterEncoding(“UTF-8”); 我的问题是: 如果我使用IME在输入框中输入中文字符,那么当我提交此表单时,输入框中的字符是什么编码?为什么? 如果我尝试将jsp页面中的“中华”复制到输入框并提交表单,在服务器端,我发现输入框中的字符串不是“UTF-8”(与请求中的设置相同)。 setCharacterEncoding)但是“BIG5”。 这是在java / jsp中,似乎请求并不像设置为“UTF-8”。 为什么?有人可以告诉我一些关于这个的事吗?

但是在asp.net中,无论我在输入框中输入并发布表单的任何字符,在服务器端,它始终是UTF-8,并且似乎永远不会损坏。

为什么? asp.net会自动处理吗?它会自动将输入框中的字符编码更改为UTF-8吗?

我一直认为表单post post只是将表单中的所有字符视为一些HEX,并且不会自动处理它们,它只是将这些HEX用头括起来然后发送给服务器。 但如果这个想法是真的,为什么角色永远不会在asp.net中被破坏?

提前致谢!

1 个答案:

答案 0 :(得分:0)

确定失败点。

中华

您选择的字符是(作为Unicode代码点)U + 4E2D和U + 83EF(在CJK Unified Ideographs块中)。在服务器上,如果使用您收到的字符串并使用Integer.toHexString(mystring.charAt(i))输出组成字符的值,您应该看到这些值。如果不是这种情况,则从客户端解释数据时会出现问题。

您指定的页面编码为UTF-8。编码为UTF-8,上述字符应采用呈现的HTML中的以下字节序列值:

U+4E2D    0xE4 0xB8 0xAD
U+83EF    0xE8 0x8F 0xAF

因此,将浏览器中的页面保存为文件并在十六进制编辑器中打开 - 您应该看到上面编码的字符。

您还可以通过将表单发送到servlet,将原始字节input转储到文件,并使用十六进制编辑器检查它来收集有关客户端发送内容的信息。还有必要检查HTTP标头以及服务器和客户端表示他们将接受和发送的字符编码(请参阅Firebug)。