杂货1

本文解答了OutlookExpress的启动及设置问题,并针对Struts2框架中遇到的中文乱码问题提供了详细的解决方案,包括如何正确设置编码以避免乱码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   1、 如何启动outlook express 以及如何在其中设置邮箱服务?

              启动是在 开始——程序——outlook express, 关于在outlook express的设置得参考各个邮箱服务商的网站, 网站上一般都会有此方面的“帮助”链接。

  2、 OUTLOOK EXPRESS在收邮件的时候会出现错误,说登录邮件服务器时出错.密码被拒绝.怎么解决? 

         在网上搜索了一下, 可能的原因有很多。 我的结论是: 最大的可能是pop3没设置好,首先你要去你申请的邮箱那里设置开通pop/stmp功能,但是网易列入:@yeah.net  163等在2008年注册的用户都没有权利开通。我换了sina网并做了相应的配置后测试通过。

  3、 最近在做struts2的上传下载练习时发现上传的文件名存在中文乱码的问题, 于是引发了我的另一个疑问:

         charset与encoding的区别?

  ————————————网上淘到的解释(未完全验证)————————————

  pageEncoding是jsp文件本身的编码


contentType的charset是指服务器发送给客户端时的内容编码


JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。


第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。


第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。


JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。


第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效


contentType的設定.


pageEncoding 和contentType的预设都是 ISO8859-1. 而随便设定了其中一个, 另一个就跟着一样了(TOMCAT4.1.27是如此). 但这不是绝对的, 这要看各自JSPC的处理方式. 而pageEncoding不等于contentType, 更有利亚洲区的文字 CJKV系JSP网页的开发和展示, (例pageEncoding=GB2312 不等于 contentType=utf-8)。


jsp文件不像.java,.java在被编译器读入的时候默认采用的是操作系统所设定的locale所对应的编码,比如中国大陆就是GBK,台湾就是BIG5或者MS950。而一般我们不管是在记事本还是在ue中写代码,如果没有经过特别转码的话,写出来的都是本地编码格式的内容。所以编译器采用的方法刚好可以让虚拟机得到正确的资料。


但是jsp文件不是这样,它没有这个默认转码过程,但是指定了pageEncoding就可以实现正确转码了。


举个例子:


<%@ page contentType="text/html;charset=utf-8" %>
 


大都会打印出乱码,因为输入的“你好”是gbk的,但是服务器是否正确抓到“你好”不得而知。


但是如果更改为


<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%>
 


这样就服务器一定会是正确抓到“你好”了

——————————————————————————————————
charset:字符编码
pageEncoding:页面编码

在JSP标准的语法中,如果pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认的ISO-8859-1。


pageEncoding设置JSP源文件和响应正文中的字符集编码.
contentType设置JSP源文件的字符集编码和响应正文的MIME类型.

可见,pageEncoding和contentType都可以设置JSP源文件和响应正文中的字符集编码.但也有区别:

设置JSP源文件字符集时,优先级为   pageEncoding   >   contentType.都没有设置,默认ISO-8859-1.

设置响应输出的字符集时,优先级为   contentType   >   pageEncoding.都没有设置,默认ISO-8859-1;都设置了,以contentType为准.实际上,response.setContentType()就是根据contentType属性设置的. 

 

4、 ————————struts2中乱码而引发的一个问题————————————

     1.为了能正确显示 jsp页面直接写的中文 在jsp页面正确显示添加下面字符设置。
               <%@ page contentType="text/html;charset=GBK"%>
               上面设置字符的语句我的理解为,1.告诉浏览器用GBK编码显示页面。2.设置request.setCharacterEncoding("GBK")
               经过上面的设置之后,jsp中直接写的中文就可以正常显示了。
            2.为了解决form提交到action中的中文参数乱码问题。
                在struts2-core-2.0.6.jar 包中路径为struts2-core-2.0.6/org/apache/struts2 有一个default.properties 文件
                把struts.i18n.encoding=UTF-8改为struts.i18n.encoding=GBK 或者在struts.xml里面改
                这样在action中取到的参数不用自己手工转码 了。

——————问题是:
   以前都是使用的utf-8, 为什么在此处使用utf-8却乱码呢? 为什么一定要gbk才能搞定呢?

  ——————————扩展——————————

   中文乱码,分别是页面乱码、action乱码,和数据库乱码。

java使用unicode编码,window使用gbk(gb2312的扩展集),mysql默认使用utf-8编码,一不小心就有可能出现乱码

这里主要说一下页面乱码的处理,

1、在struts2框架中,jsp页面一般设置为utf-8

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

2、项目的字符集也应设置为utf-8,

使用struts.xml的设置方法

<constant name="struts.locale" value="zh_CN" />
<constant name="struts.i18n.encoding" value="UTF-8" />

使用struts.properties 的设置方法

struts.locale=zh_CN

struts.i18n.encoding=UTF-8

3、这里jsp页面使用struts2的标签开发,关键就在于国际化的资源文件了,struts2的资源文件采用properties文件格式,但是必须的用Unicode编码,这里特别要说的是,用系统自带的记事本编写资源文件后再用Unicode编码格式保存是不可以的,这样做页面中仍然还是乱码,我所用的是UltraEdit编写资源文件,然后保存为Unicode-ASCII Escaped格式,这样就没有问题了

4、 前台jsp表单提交中文参数过去,在action中调试时总是接收到乱码

表单使用的是post提交方式
jsp页面设置
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

struts.xml 也设置了  <constant name="struts.i18n.encoding" value="UTF-8" />

自己还写了一个拦截器
public class CharEncodinInterceptor extends  AbstractInterceptor  {
  @Override
public String intercept(ActionInvocation invocation) throws Exception {
  HttpServletRequest request = ServletActionContext.getRequest();
  request.setCharacterEncoding("UTF-8");
  return invocation.invoke();
  }
}
并且已经成功引用该拦截器

此外tomcat 页设置了 URIEncoding="UTF-8"

但是action 中接收中文时还是乱码

——————最好两个都设置
  <%@ page contentType=”text/html; charset=UTF-8″%>
<%@ page pageEncoding=”UTF-8″ %>
 

 

   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值