已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
UTF-8字符处理在Web开发中的应用Web 应用要适应多语言的需求。不同国家的用户应该可以输入本国语言的字符, 同时 Web 应用又应该可以根据不同的区域设置来用多国语言显示页面。 当前,不同的语言有不同的编码方式来显示对应的语言信息,例如中文可以用 GB2312 编码来显示,日文可以用 Shift-JIS 编码来显示。但 UTF-8 编码方式几乎可以包括了所有的语言字符。用 UTF-8 编码来处理 Web 应用信息的输入和显示可以使不同 Web 应用之间的信息交互标准化,并且可以简化应用的开发过程。UTF-8 编码介绍UTF-8 编码是一种被广泛应用的编码,这种编码致力于把全球的语言纳入一个统一的编码,目前已经将几种亚洲语言纳入。UTF 代表 UCS Transformation Format.UTF-8 采用变长度字节来表示字符,理论上最多可以到 6 个字节长度。UTF-8 编码兼容了 ASC II(0-127), 也就是说 UTF-8 对于 ASC II 字符的编码是和 ASC II 一样的。对于超过一个字节长度的字符,才用以下编码规范:左边第一个字节1的个数表示这个字符编码字节的位数,例如两位字节字符编码样式为为:110xxxxx 10xxxxxx; 三位字节字符的编码样式为:1110xxxx 10xxxxxx 10xxxxxx.;以此类推,六位字节字符的编码样式为:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx。 xxx 的值由字符编码的二进制表示的位填入。只用最短的那个足够表达一个字符编码的多字节串。例如:Unicode 字符: 00 A9(版权符号) = 1010 1001, UTF-8 编码为:11000010 10101001 = 0x C2 0xA9; 字符 22 60 (不等于符号) = 0010 0010 0110 0000, UTF-8 编码为:11100010 10001001 10100000 = 0xE2 0x89 0xA0HTTP 通讯协议HTTP 请求在 HTTP 通讯中,在客户端发出的请求报文中,首先设置的是方法。方法是用来告诉服务器客户端发起的动作请求。在请求的报文头部,客户端还可以同时发送附加的信息, 比如客户端使用的浏览器和客户端可以解释的内容类型等。这些信息可以被服务器端应用程序使用以生成响应。下面是一个 HTTP 请求消息的示例:图1. HTTP 请求消息头GET /intro.html HTTP/1.0User-Agent: Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)Accept: image/gif, image/jpeg, text/*, */*Accept-language : zhAccept-Charset: iso-8859-1这个请求通过 GET 方法来获取资源 /intro.htm。User-Agent 提供了客户端浏览器的信息,同时 Accept 提供了客户端可以接受的媒体类型。Accep-language 指出了客户端浏览器的首选语言, Accept-Charset 提供了浏览器的首选字符集,服务器端程序能够根据客户端的要求来生成需要的响应。用户可以通过配置浏览器来设置首选语言。以 IE 为示例如下:图2. 浏览器首选语言设置当浏览器发出请求后,可以通过以下代码来读取客户端浏览器的首选语言和国家代码。图3. 服务器端 Servlet 读取浏览器首选国家和语言protected void insertproc(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException Locale reqLocal = req.getLocale(); System.out.println(The country is : + reqLocal.getCountry(); System.out.println(The language is : + reqLocal.getLanguage();服务器端的输出结果为:图4. 服务器端 Servlet 读取浏览器首选国家和语言结果06-3-10 14:56:32:516 CST 6ce078f9 SystemOut O The country is :CN06-3-10 14:56:32:516 CST 6ce078f9 SystemOut O The language is :zhHTTP 响应当服务器端收到请求后,会处理请求并发回应答。服务器通过应答消息的头部来指明诸如服务器软件和相应的内容类型等信息。以下是一个应答消息头的示例:图5.HTTP 应答消息头Date: Saturday, 23-May-98 03:25:12 GMTServer: JavaWebServer/1.1.1MIME-version: 1.0Content-type: text/html; charset=UTF-8Content-length: 1029Last-modified: Thursday, 7-May-98 12:15:35 GMTContent-type 表明了应答消息的 MIME 类型和应答消息体的字符集,浏览器会用相应的字符集来显示消息内容。例如,在以上示例中字符集是 UTF-8,浏览器会用 UTF-8 编码来解析和现实返回的消息体。同时页面输入也会被用 UTF-8 编码。Web 页面显示编码可以通过以下几种方式来设置内容类型。在 HTML 中设置页面的编码方式如果被访问的是一个静态的 HTML 页面。可以通过以下方式来设置页面的编码方式。图6. 设置页面编码的静态 HTML 文件example.html标记 将应答消息头中 Content_type 设置为text/html; charset=UTF-8.在 Servlet 中设置页面显示编码方式在 Servlet 中,我们可以通过以下方式来设置应答消息的内容类型。图7.设置页面编码的 Servlet 片断protected void insertproc(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOExceptionresp.setContentType(text/html;charset=UTF-8);代码行resp.setContentType(text/html;charset=UTF-8);将应答消息头中 Content_type 设置为text/html; charset=UTF-8。 在 JSP 中设置页面显示编码方式我们通过以下示例说明如何在 JSP 中设置页面的编码格式。图8. 设置业面编码的 JSP 页面指令在这行的页面指令中的text/html; charset=UTF-8将应答消息中的Content-type 设置为text/html; charset=UTF-8。pageEncoding只是指明了 JSP 页面本身的编码格式,指明了 JSP 是以什么编码方式保存。容器在读取文件时将起转化为内部使用的 Unicode. 当应答发送回至浏览器时,容器会将内部使用的 Unicode 转化为在 Content-type 中指定的字符集。如果没有指定 PageEncoding,可以通过使用 Content-type 指定的字符集来解释 JSP 页面字节。为了能正常显示 UTF-8 编码的字符,要满足以下两个条件:1. 通知浏览器应答消息使用的字符集。2. 配置浏览器使其能有正常显示 UTF-8 编码的字体。Web 页面输入编码HTML 的表单可以接受非西欧语言字符的输入。当需要创建一个需要接受非西欧语言字符输入的表单时,必须通知浏览器应该为用户输入使用哪个字符集,我们可以通过设置 page 指令的 contentType 属性来设置。我们需要注意的是,当表单被提交后,浏览器会将表单字段值转换为指定字符集对应的字节值,然后根据 HTTP 标准 URL 编码方案对结果字节进行编码。当使用 ISO-8859-1 编码时,任何 a 到 z, A 到 Z 和 0 到 9 之外的字符都会被转化为十六进制格式的字节值,并在前面加上一个百分号(%).例如,如果表单的字符集被设为 UTF-8, 字符中文被传递的编码格式为:%E4%B8%AD%E6%96%87。为了对输入的信息进行处理,容器必须知道浏览器是使用什么字符集对输入进行 编码的。问题是当今多数的浏览器并不提供这种信息,因此你必须自己提供这种信息,并告诉容器用哪个字符集对输入进行解码。页面输入编码设定在本文第3部分中说明了如何设置页面的显示编码,在设置页面编码的同时,也就指定了页面的输入方式。如果页面的显示被设置为UTF-8,那么用户所有的页面输入都会按照 UTF-8 编码。页面输入输出过程编码设置服务器端程序在读取表单输入之前要设定输入编码。我们可以看一下示例。以下是一个用来提示用户输入的 JSP 页面:图9. 用以界面输入的 JSP 页面insertdb.jspName:页面指令元素的属性 Content-type 值为text/html; charset=UTF-8,这会向浏览器指明页面是按照 UTF-8 编码的,并且所有用户通过页面的输入也会按照 UTF-8 编码。被 Action 所触发的 Servlet 如下例所示。图10. 用以按 UTF-8 读取输入并输出的 Servlet protected void insertproc(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException String test1 = req.getParameter(col2); PrintWriter out = resp.getWriter(); resp.setContentType(text/html;charset=UTF-8); out.println(); out.println(The input is + test1); out.println(); 通过表单页面输入中文并提交表单,得到的结果为:图11.正确显示结果的页面如果我们注释掉语句:resp.setContentType(text/html;charset=UTF-8), 如下例:图12. 用以按非 UTF-8 读取输入并输出的 Servletprotected void insertproc(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOExceptionString test1 = req.getParameter(col2); PrintWriter out = resp.getWriter(); /resp.setContentType(text/html;charset=UTF-8) out.println(); out.println(The input is + test1); out.println(); 输入中文并提交表单,得到的结果为:图13. 错误显示输入结果的页面页面不能正确显示 UTF-8 编码的字符。在被触发的 Servlet 中通过设置 resp.setContentType(text/html;charset=UTF-8) 来向浏览器指明输出的编码字符集为 UTF-8,浏览器会用正确的字符集来显示输出。如果 Servlet 中没有显示的调用 resp.setContentType(text/html;charset=UTF-8) 来设定输出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 赔偿合同范本模板模板
- 货物售后回租合同范本
- 维修装修服务合同范本
- 第七课 结构化程序设计教学设计-2025-2026学年初中信息技术粤教版2019八年级下册-粤教版2019
- 2025年考研教育学学前教育学精讲试卷(含答案)
- 衡水燃气合作协议合同
- 统一饮料销售合同范本
- 药品广告宣传合同协议
- 销售返利协议合同范本
- 物业合作协议劳动合同
- 2025年教育研究方法试卷及答案
- 2024年葫芦岛辅警协警招聘考试真题含答案详解ab卷
- 上海危险品从业资格证考试试题及答案
- 胎盘早剥课件
- 平行账的实现
- 龙湖西城天街招商手册
- 断层影像解剖学智慧树知到答案章节测试2023年中南大学
- (电梯改造施工方案)
- 夜空中最亮的星二部合唱简谱
- 纤维的鉴别与品质评定
- T-SFSF 000001-2021 放心餐厅、放心食堂管理规范
评论
0/150
提交评论