随笔-55  评论-208  文章-0  trackbacks-0
bea workshop studio(原nitrox m7)确实是个好东西,但是我再使用它的jsp编辑器打开含有utf-8的中文jsp页面时其中的中文是乱码,而且你修改有乱码的页面后,再用别的编辑器打开发现原来正常的中文也都变成乱码了。
为了解决问题我在google和baidu的搜索了好久没有找到方法,于是我到m7的论坛(http://forums.m7.com/forum/index.php)看看有没有解决方法。
终于我找到这样一个记录http://forums.m7.com/forum/viewtopic.php?t=463&start=0&postdays=0&postorder=asc&highlight=encoding
其中m7 support给出的解释是这样的:
NitroX looks for a meta tag to determin the charset that should be used to encode the page file. The page directive is usually used to determin the charset used by the server to serve the page to the browser. These 2 are not the same (for good reasons). 

So, 
try something like: 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

M7 Support

所以可以知道,workshop的jsp编辑器在打开jsp页面时首先是从meta的标签中读取页面的编码的。
于是,我先用其它的编辑器(我用的是dw8)打开有问题的jsp页面,然后在其中添加meta标签
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
    
<title>下部框架页</title>
    
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" > 
    
<meta http-equiv="pragma" content="no-cache">
    
<meta http-equiv="cache-control" content="no-cache">
    
<meta http-equiv="expires" content="0">
。。。。。。。。。。

然后再用workshop的编辑器打开,发现中文显示正常了,本以为这样问题就结束了
但是当我修改另外一个页面后,用workshop打开发现依然是乱码
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="jbc.util.WebHelper" %>
<%@ include file="resource.jsp"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
  
<head>
  
    
<html:base />   
    
    
<title>desktop.jsp</title>
    
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" > 
    
<meta http-equiv="pragma" content="no-cache">
    
<meta http-equiv="cache-control" content="no-cache">
    
<meta http-equiv="expires" content="0">    
。。。。。。。。。。。。

这与前一个页面的不同之处在于增加了struts标签,我在反复测试后发现把<html:base />这个标签删除后中文就正常了,但是<html:base />这个标签是必须的,于是我把<html:base />这个标签放置在meta后面
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="jbc.util.WebHelper" %>
<%@ include file="resource.jsp"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
  
<head>
    
<title>desktop.jsp</title>
    
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" > 
    
<meta http-equiv="pragma" content="no-cache">
    
<meta http-equiv="cache-control" content="no-cache">
    
<meta http-equiv="expires" content="0">    
    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    
<meta http-equiv="description" content="This is my page">
    
<common:validate/>
    
<html:base />
  
</head>
而且经过测试我发现,不仅仅是struts标签,在meta前面加入任何标签都将导致页面的中文乱码。
因此我认为workshop的jsp editer在打开文件时首先要读取jsp页面的meta标签以确定编码,如果没有指定字符集的meta标签或者在该meta标签前增加其它方法标签将会导致编辑器读取编码不正常,而使得编辑器以默认的gb2312字符集打开文件导致乱码
总结workshop(原nitrox m7)的utf-8中文乱码问题的解决步骤应该是:
1、首先确定项目的编码是uft-8,这样保证默认的jsp页面属性是utf-8
2、在jsp页面中添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >,注意如果已经含有中文并且是乱码就必须先要用其它可以正常显示的编辑器打开添加后并保存
3、当发现打开依然是乱码时就要检查是不是在<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >前还有什么需要逻辑处理的标签影响的workshop对jsp页面的读取。

这个问题花费了我两个礼拜的时间希望我的方法能够给同样和我一样在为这个问题烦恼的朋友有所帮助
posted on 2006-04-12 10:52 rocket 阅读(2531) 评论(8)  编辑  收藏

评论:
# re: 关于workshop(原nitrox m7)的utf-8中文乱码问题解决 2006-04-12 12:21 | pfood
谢谢  回复  更多评论
  
# re: 关于workshop(原nitrox m7)的utf-8中文乱码问题解决 2006-04-12 14:10 | keith
这问题我在M7上问过,他们是根据<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >确定文件编码的,希望能改进一下,这样很不合理,因为不是所有页面都要增加的的,例如include进来的,再在每页都加上meta不就重复了。
最好能改成根据<%@ page language="java" pageEncoding="UTF-8"%>来保存文件的编码。
如果能像myeclipse那样就更好了  回复  更多评论
  
# re: 关于workshop(原nitrox m7)的utf-8中文乱码问题解决 2006-04-12 14:29 | rocket
@keith
是的,买了这么贵的东西,其它都很好用,但是要是因为这一个小问题影响了使用真的是太不应该了  回复  更多评论
  
# re: 关于workshop(原nitrox m7)的utf-8中文乱码问题解决 2006-04-13 10:13 | Harryson
楼主辛苦了,
找出问题了,肯定很兴奋.
找bug很有挑战性.  回复  更多评论
  
# re: 关于workshop(原nitrox m7)的utf-8中文乱码问题解决 2006-04-13 21:56 | 小武藏
有一种解决办法是修改 Tomcat 的 server.xml 文件的 connnector:
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8" useBodyEncodingForURI="true" />

其中 URIEncoding="UTF-8" useBodyEncodingForURI="true" 是需要新增的。
我也被这样的问题困惑过。

  回复  更多评论
  
# re: 关于workshop(原nitrox m7)的utf-8中文乱码问题解决 2006-04-13 23:44 | rocket
@小武藏
谢谢你的补充
不过我的问题是
你这样更改是在启动服务器以后可以正确的显示jsp页面
而我处理的问题是在使用eclipse编辑jsp页面时出现乱码  回复  更多评论
  
# re: 关于workshop(原nitrox m7)的utf-8中文乱码问题解决 2006-07-26 02:46 | boin
给Eclipse加上启动参数 -Dfile.encoding=utf-8 也能完美解决这个问题!  回复  更多评论
  
# re: 关于workshop(原nitrox m7)的utf-8中文乱码问题解决 2006-08-12 18:10 | xudi
强!太感谢了!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: