|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不得不提一下的是:.net是看到java红,而开发出来的工具。办理|成绩|中文|中文乱码5、我们要对Java的编译器有所懂得:
Javac?encoding
我们经常没有效到encoding这个参数。实在encoding这个参数关于跨平台的操纵是很主要的。假如没有指定encoding,则依照体系的默许encoding,gb平台上是gb2312,英文平台上是iso8859_1。Java的编译器实践上是挪用sun.tools.Javac.main的类,对文件举行编译,这个类有compile函数两头有一个encoding的变量,-encoding的参数实在间接传给encoding变量。编译器就是依据这个变量来读取Java文件的,然后把用utf-8情势编译成class文件。例子代码:
Stringstr="你";
FileWriterwriter=newFileWriter("text.txt");
write.write(str);
writer.close();
假如用gb2312编译,你会找到e4bda0的字段;
假如用8859_1编译,00c400e3的二进制:
0000,0000,1100,0100,0000,0000,1110,0011
由于每一个字符都年夜于7位,因而用11位编码:
1100,0001,1000,0100,1100,0011,1010,0011
c1--84-- c3-- a3
你会找到c184c3a3
可是我们常常疏忽失落这个参数,因而如许常常会有跨平台的成绩:
样例代码在中文平台上编译,天生zhclass
样例代码在英文平台上编译,输入enclass
(1)zhclass在中文平台上实行ok,可是在英文平台上不可
(2)enclass在英文平台上实行ok,可是在中文平台上不可
缘故原由是:
(1)在中文平台上编译后,实在str在运转态的char[]是0x4f60, 在中文平台上运转,filewriter的缺省编码是gb2312,因而chartobyteconverter会主动用挪用gb2312的converter,把str转化成byte输出到fileoutputstream中,因而0xc4,0xe3放进了文件。可是假如是在英文平台下,chartobyteconverter的缺省值是8859_1,filewriter会主动挪用8859_1往转化str,可是他没法注释,因而他会输入"?"
(2)在英文平台上编译后,实在str在运转态的char[]是0x00c40x00e3,在中文平台上运转,中文没法辨认,因而会呈现??;在英文平台上,0x00c4-->0xc4,0x00e3->0xe3,因而0xc4,0xe3被放进了文件。
6、别的缘故原由:
<%@pagecontentType="text/html;charset=GBK"%>
设置扫瞄器的显现编码,假如response的数据是utf8编码,显现将是乱码,可是乱码和上述缘故原由还纷歧样。
7、产生编码的中央:
1.从数据库到Java程序byte??〉char
2.从Java程序到数据库char??〉byte
3.从文件到Java程序byte??〉char
4.从Java程序到文件char??〉byte
5.从Java程序到页面显现char??〉byte
6.从页面form提交数据到Java程序byte??〉char
7.从流到Java程序byte??〉char
8.从Java程序到流char??〉byte
可使用设置过滤器的办法办理中文乱码的:
<web-app>
<filter>
<filter-name>RequestFilter</filter-name>
<filter-class>net.golden.uirs.util.RequestFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>RequestFilter</filter-name>
<url-pattern>*.Jsp</url-pattern>
</filter-mapping>
</web-app>
publicvoiddoFilter(ServletRequestreq,ServletResponseres,
FilterChainfChain)throwsIOException,ServletException{
HttpServletRequestrequest=(HttpServletRequest)req;
HttpServletResponseresponse=(HttpServletResponse)res;
HttpSessionsession=request.getSession();
StringuserId=(String)session.getAttribute("userid");
req.setCharacterEncoding(this.filterConfig.getInitParameter("charset"));
//设置字符集?
实践上是设置了byte??〉char的encoding
try{
if(userId==null||userId.equals("")){
if(!request.getRequestURL().toString().matches(
".*/uirs/logon/logon(Controller){0,1}x2EJsp$")){
session.invalidate();
response.sendRedirect(request.getContextPath()+
"/uirs/logon/logon.Jsp");
}
}
else{
//看看是不是具有信息上报体系的权限
if(!net.golden.uirs.util.UirsChecker.check(userId,"信息上报体系",
net.golden.uirs.util.UirsChecker.ACTION_DO)){
if(!request.getRequestURL().toString().matches(
".*/uirs/logon/logon(Controller){0,1}x2EJsp$")){
response.sendRedirect(request.getContextPath()+
"/uirs/logon/logonController.Jsp");
}
}
}
}
catch(Exceptionex){
response.sendRedirect(request.getContextPath()+
"/uirs/logon/logon.Jsp");
}
fChain.doFilter(req,res);
}
但是我同意你的观点,对于大型项目来说,应该是采用框架的一部分,根据功能的不同而改进,欢迎你能再提出些宝贵意见,我会多多学习的。说到jbuilder,我可能是个人感觉,用的时候确实没有vs爽,我最喜欢的IDE是netbeans,谢谢。 |
|