飘飘悠悠 发表于 2015-1-18 11:30:06

了解下JAVA的JNI中文处置成绩小结

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&ndash;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系统,又是捆绑,鄙视微软之!

深爱那片海 发表于 2015-1-19 06:27:00

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

莫相离 发表于 2015-1-24 09:49:20

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

老尸 发表于 2015-1-25 09:36:13

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

冷月葬花魂 发表于 2015-2-4 21:47:04

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

活着的死人 发表于 2015-2-9 22:48:07

Java 编程语言的风格十分接近C、C++语言。

灵魂腐蚀 发表于 2015-2-10 03:21:28

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

金色的骷髅 发表于 2015-2-28 17:52:40

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

再现理想 发表于 2015-3-1 15:12:26

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

透明 发表于 2015-3-10 19:16:39

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

若相依 发表于 2015-3-17 09:10:39

Java 编程语言的风格十分接近C、C++语言。

仓酷云 发表于 2015-3-24 05:28:59

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
页: [1]
查看完整版本: 了解下JAVA的JNI中文处置成绩小结