|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
net网页编程程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net网页编程比。java程序员都是代码完成的,所以java程序员常戏称.net网页编程程序员是操作员,呵呵。
因为事情干系,必要使用JNI在C++与Java程序之间举行办法挪用和数据传送,但之前老是在英文情况下事情,对中文(其他言语编码同理)成绩反倒没有太存眷,比来抽了点工夫研讨了一下,将本人的体味收拾以下,供人人会商或参考。
在进一步会商之前,有几点基本常识必要申明:
在Java外部,一切的字符串编码接纳的是Unicode即UCS-2。Unicode是用两个字节暗示每一个字符的字符编码计划。Unicode有一个特征:它包含了天下上一切的字符字形。以是,各个区域的言语都能够创建与Unicode的映照干系,而Java恰是使用了这一点以到达异种言语之间的转换;
UTF-8是另外一种分歧于UCS-2/UCS-4的编码计划,个中UTF代表UCSTransformationFormat,它接纳变长的体例举行编码,编码长度能够是1~3(听说实际上最长能够到6,不懂)。
因为UCS-2/UCS-4编码定长的缘故原由,编码发生的字符串会包括一些特别的字符,如 (即0x0,一切0~256的字符Unicode编码的第一个字节),这在有些情形下(如传输或剖析时)会给我们带来一些贫苦,并且关于一样平常的英笔墨母华侈了太多的空间,别的,听说UTF-8另有Unicode所没有的纠错才能(不懂!),因而,Unicode常常只是被用作一种两头码,用于逻辑暗示。关于Unicode/UTF-8的更多信息,见参考1;
Java中文乱码成绩在良多情形下都大概产生:分歧使用间,分歧平台间等等,但以上成绩已有大批优异的文章会商过,这里不作深切切磋,详见参考2、3、4、5。上面扼要总结一下:
当我们利用默许编码体例保留源文件时,文件内容实践上是依照我们的体系设定举行编码保留的,这个设定值即file.encoding能够经由过程上面的程序取得:
publicclassEncoding{
publicstaticvoidmain(String[]args){
System.out.println(System.getProperty("file.encoding"));
}
}javac在不指定encoding参数时,假如地区设定不准确,则大概形成编/解码毛病,这个成绩在编译一个从其余情况传过去的文件时大概产生;
2、固然在Java外部(即运转时代,Runtime)字符串是以Unicode情势存在的,但在class文件中信息是以UTF-8情势存储的(Unicode仅被用作逻辑暗示两头码);
关于Web使用,以Tomcat为例,JSP/Servlet引擎供应的JSP转换工具(jspc)搜刮JSP文件顶用<%@pagecontentType="text/html;charset=<Jsp-charset>"%>指定的charset。假如在JSP文件中未指定<Jsp-charset>,则取体系默许的file.encoding(这个值在中文平台上是GBK),可经由过程把持面板的RegionalOptions举行修正;jspc用相称于“javac–encoding<Jsp-charset>”的命令注释JSP文件中呈现的一切字符,包含中笔墨符和ASCII字符,然后把这些字符转换成Unicode字符,再转化成UTF-8格局,存为JAVA文件。
我已经偶尔将jsp文件存成UTF-8,而在文件外部利用的charset倒是GB2312,了局运转时老是没法一般显现中文,厥后转存为默许编码体例才一般。只需文件存储格局与JSP开首的charset设置分歧,就都能够一般显现(不外将文件保留成UTF-16的情形下我还没有实验乐成);
在XML文件中,encoding暗示的是文件自己的编码体例,假如这个参数设定与文件自己实践的编码体例纷歧致的话,则大概解码失利,以是应当老是将encoding设置成与文件编码体例分歧的值;而JSP/HTML的charset则暗示依照何种字符集来解码从文件中读掏出来的字符串(在了解中文成绩时应当把字符串了解成一个二进制或16进制的串,依照分歧的charset大概映照成分歧的字符)。
我已经在网上就encoding的详细寄义跟他人会商过:假如encoding指的是文件自己的编码体例,那末读取该文件的使用程序在不晓得encoding设置的情形下怎样准确解读该文件呢?
依据会商及团体了解,处置程序(如jspc)老是按ISO8859-1来读取输出文件,然后反省文件入手下手的几个字节(即ByteOrderMark,BOM,详细怎样判别,能够参考Tomcat源码$SOURCE_DIRjasperjasper2srcshareorgapachejasperxmlparserXMLEncodingDetector.java的getEncodingName办法,在JSPSpecification的PageCharacterEncoding一节也有具体叙述)以探测文件是以何种格局保留的,当剖析到encoding选项时,若encoding设置与文件实践保留格局纷歧致,会实验举行转换,但这类转换大概在文件实践以ISO8859-1/UTF-8等单字节编码而encoding被设置成Unicode、UTF-16等双字节编码时产生毛病。
<p>
没有那个大公司会傻了吧唧用.net网页编程开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net网页编程不行,限制在window系统,又是捆绑,鄙视微软之! |
|