JAVA 代码交互率低的原因分析,深入剖析Java编程中的中文问题及建议最优解决方法...

说明:本文为作者原创,作者联系地址为:

josserchai@yahoo.com

。由于

Java

编程中的中文

问题是一个老生常谈的问题,在阅读了许多关于

Java

中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题。于是我给出此篇文章,内容包括对控制台运行的

class

Servelets

JSP

EJB

类中的中文问题我剖析和建议解决办法。希望大家指教。任何引用本文请注明出处!!

Abstra

ct

:本文深入分析了

Java

程序设计中

Java

编译器对

java

源文件和

JVM

class

类文件的编码

/

解码过程,通过此过程的解析透视出了

Java

编程中中文问题产生的根本原因,最后给出了建议的最优化的解决

Java

中文问题的方法。

1

、中文问题的来源

计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程

序最初都是以单字节编码的英文为准进行处理。随着计算机的发展,为了适应世界其它民族

的语言(当然包括我们的汉字),人们提出了

UNICODE

编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用

UNICODE

编码,在软件运行时,它获得本地支持系统(多数时间是操作系统)默认支持的编码格式,然后再将软件内部的

UNICODE

转化为本地系统默认支持的格式显示出来。

Java

JDK

JVM

即是如此,我这里说的

JDK

是指国际版的

JDK

,我们大多数程序员使用的是国际化的

JDK

版本,以下所有的

JDK

均指国际化的

JDK

版本。我们的汉字是双字节编码语言,为了能让计算机处理中文,我们自己制定的

gb2312

GBK

GBK2K

等标准以适应计算机处理的需求。所以,大部分的操作系统为了适应我们处理中文的需求,均定制有中文操作系统,它们采用的是

GBK,GB2312

编码格式以正确显示我们的汉字。如:中文

Win2K

默认采用的是

GBK

编码显示,在中文

WIN2k

中保存文件时默认采用的保存文件的编码格式也是

GBK

,即,所有在中文

WIN2K

中保存的文件它的内部编码默认均采用

GBK

编码,注意:

GBK

是在

GB2312

基础上扩充来的

由于

Java

语言内部采用

UNICODE

编码,所以在

JAVA

程序运行时,就存在着一个

UNICODE

编码和对应的操作系统及浏览器支持的编码格式转换输入、输出的

问题,这个转换过程有着一系列的步骤,如果其中任何一步出错,则显示出来的汉字就会出是乱码,这就是我们常见的

JAVA

中文问题。

同时,

Java

是一个跨平台的编程语言,也即我们编写的程序不仅能在中文

windows

上运行,也能在中文

Linux

等系统上运行,同时也要求能在英文等系统上运行(我们经常看到有人把在中文

win2k

上编写的

JAVA

程序,移植到英文

Linux

上运行)。这种移植操作也会带来中文问题。

还有,有人使用英文的操作系统和英文的

IE

等浏览器,来运行带中文字符的程序和浏览中文网页,它们本身就不支持中文,也会带来中文问题。

几乎所有的浏览器默认在传递参数时都是以

UTF-8

编码格式来传递,而不

是按中文编码传递,所以,传递中文参数时也会有问题,从而带来乱码现象。

总之,以上几个方面是

JAVA

中的中文问题的主要来源,我们把以上原因造成的程序不能正确运行而产生的问题称作:

JAVA

中文问题。

2

JAVA

编码转换的详细过程

我们常见的

JAVA

程序包括以下类别:

*

直接在

console

上运行的类

(

包括可视化界面的类

)

*JSP

代码类(注:

JSP

Servlets

类的变型)

*Servelets

*EJB

*

其它不可以直接运行的支持类

这些类文件中,都有可能含有中文字符串,并且我们常用前三类

JAVA

程序和用户直接交互,用于输出和输入字符,如:我们在

JSP

Servlet

中得到客户端送来的字符,这些字符也包括中文字符。无论这些

JAVA

类的作用如何,这些

JAVA

程序的生命周期都是这样的:

*

编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以

.java

展名保存在操作系统中,例如我们在中文

win2k

中用记事本编辑一个

java

源程序;

*

编程人员用

JDK

中的

javac.exe

来编译这些源代码,形成

.class

(JSP

文件是由容器调用

JDK

来编译的

)

*

直接运行这些类或将这些类布署到

WEB

容器中去运行,并输出结果。

那么,在这些过程中,

JDK

JVM

是如何将这些文件如何编码和解码并运行的呢?

这里,我们以中文

win2k

操作系统为例说明

JAVA

类是如何来编码和被解码的。

第一步,我们在中文

win2k

中用编辑软件如记事本编写一个

Java

源程序文件

(

包括以上五类

JAVA

程序

)

,程序文件在保存时默认采用了操作系统默认支持

GBK

编码格式

(

操作系统默认支持的格式为

file.encoding

格式

)

形成了一个

.java

文件,也即,

java

程序在被编译前,我们的

JAVA

源程序文件是采用操作系统默认支持的

file.encoding

编码格式保存的

java

源程序中含有中文信息字符和英文程序代码;要查看系统的

file.encoding

参数,可以用以下代

码:

public class ShowSystemDefaultEncoding {

public static void main(String[] args) {

String encoding = System.getProperty("file.encoding");

System.out.println(encoding);

}}

第二步,我们用

JDK

javac.exe

文件编译我们的

Java

源程序,由于

JDK

是国际版的,在编译的时候,如果我们没有用

-encoding

参数指定我们的

JAVA

源程序的编码格式,则

javac.

exe

首先获得我们操作系统默认采用的编码格式

,也即在编译

java

程序时,若我们不指定源

程序文件的编码格式,

JDK

首先获得操作系统的

file.encoding

参数

(

它保存的就是操作系统

默认的编码格式,如

WIN2k

,它的值为

GBK)

,然后

JDK

就把我们的

java

源程序从

file.encodi

ng

编码格式转化为

JAVA

内部默认的

UNICODE

格式放入内存中。然后,

javac

把转换后的

unicode

格式的文件进行编译成

.class

类文件,此时

.class

文件是

UNICODE

编码的,它暂放在内存中,紧接着,

JDK

将此以

UNICODE

编码的编译后的

class

文件保存到我们的

操作系统中形成我们见到的

.class文件。

对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件

,它内部包含我们源程序中的中文字符串,只不过此时它己经由

file.encoding

格式转化为

UNICODE

格式了。

这一步中,对于

JSP

源程序文件是不同的,对于

JSP

,这个过程是这样的:即

WEB

容器调用

JSP

编译器,

JSP

编译器先查看

JSP

文件中是否设置有文件编码格式,如果

JSP

文件中没有设置

JSP

文件的编码格式,则

JSP

编译器调用

JDK

先把

JSP

文件用

JVM

默认的字符编码格式

(

也即

WEB

容器所在的操作系统的默认的

file.encoding)

转化为临时的

Servlet

类,然后再把它编译成

UNICODE

格式的

class

类,并保存在临时文件夹中。如:在中文

win2k

上,

WEB

容器就把

JSP

文件从

GBK

编码格式转化为

UNICODE

格式,然后编译成临时保存的

Servlet

类,以响应用户的请求。

第三步,运行第二步编译出来的类,分为三种情况:

A

直接在

console

上运行的类

B

EJB

类和不可以直接运行的支持类

(

JavaBean

)

C

JSP

代码和

Servlet

D

JAVA

程序和数据库之间

下面我们分这四种情况来看。

A

、直接在

console

上运行的类

这种情况,运行该类首先需要

JVM

支持,即操作系统中必须安装有

JRE

运行过程是这样的:首先

java

启动

JVM

此时JVM读出操作系统中保存的class文件并把内容读入内存中,此时内存中为

UNICODE格式的

class类

,然后

JVM

运行它,如果此时此类需要接收用户输入,则类会默认用file.encoding编码格式对用户输入的串进行编码并转化为unicode保存入内存

(用户可以设置输入流的编码格式)。程序运行后,产生的字符串(UNICODE编码的)再回交给JVM,最后

JRE把此字符串再转化为

file.encoding格式

(

用户可以设置输出流的编码格式

)

传递给操作系统显示接口并输出到界面上。

对于这种直接在

console

上运行的类,它的转化过程可用图

1

更加明确的表示出来:

1

以上每一步的转化都需要正确的编码格式转化,才能最终不出现乱码现象。

B

EJB

类和不可以直接运行的支持类

(

JavaBean

)

由于

EJB

类和不可以直接运行的支持类,它们一般不与用户直接交互输入和输出,它们常常与其它的类进行交互输入和输出,所以它们在第二步被编译后,就形成了内容是

UNICODE

编码的类保存在操作系统中了,以后只要它与其它的类之间的交互在参数传递过程中没有丢失,则它就会正确的运行。这种

EJB

类和不可以直接运行的支持类

,

它的转化过程可用图

2

更加明确的表示出来:

2

C

JSP

代码和

Servlet

经过第二步后,

JSP

文件也被转化为

Servlets

类文件,只不过它不像标准的

Servlets

校存在于

classes

目录中,它存在于

WEB

容器的临时目录中,故这一步中我们也把它做为

Servlets

来看。

对于

Servlets

,客户端请求它时,

WEB

容器调用它的

JVM

来运行

Servlet

,首先,

JVM

Servlet

class

类从系统中读出并装入内存中,内存中是以

UNICODE

编码的

Servlet

类的代码,然后

JVM

在内存中运行该

Servlet

类,如果

Servlet

在运行的过程中,需要接受从

客户端传来的字符如:表单输入的值和

URL

中传入的值,

此时如果程序中没有设定接受参数时采用的编码格式,则

WEB

容器会默认采用

ISO-8859-1

编码格式来接受传入的值并在

JVM

中转化为

UNICODE

格式的保存在

WEB

容器的内存中

Servlet

运行后生成输出,输出的字符串是

UNICODE

格式的,紧接着,容器将

Servlet

运行产生的

UNICODE

格式的串(如

html

语法,用户输出的串等)直接发送到客户端浏览器上并输出给用户,如果此时指定了发送时输出的编码格式,则按指定的编码格式输出到浏览器上,如果没有指定,则默认按

ISO-8859-1

编码发送到客户的浏览器上。这种

JSP

代码和

Servlet

类,它的转化过程可用

3

更加明确地表示出来:

3

D

Java

程序和数据库之间

对于几乎所有数据库的

JDBC

驱动程序,默认的在

JAVA

程序和数据库之间传递数据都是以

ISO-8859-1

为默认编码格式的,所以,我们的程序在向数据库内存储包含中文的数据时,

JDBC

首先是把程序内部的

UNICODE

编码格式的数据转化为

ISO-8859-1

的格式,然后传递到数据库中,在数据库保存数据时,它默认即以

ISO-8859-1

保存,所以,这是为什么我们常常在数据库中读出的中文数据是乱码。

对于

JAVA

程序和数据库之间的数据传递,我们可以用图

4

清晰地表示出来:

4

3

、分析常见的

JAVA

中文问题几个必须清楚的原则

首先,经过上面的详细分析,我们可以清晰地看到,任何

JAVA

程序的生命期中,其编码转换的关键过程是在于:最初编译成

class

文件的转码和最终向用户输出的转码过程。

其次,我们必须了解

JAVA

在编译时支持的、常用的编码格式有以下几种:

*ISO-8859-1

8-bit,

8859_1,ISO-8859-1,ISO_8859_1

等编码

*Cp1252

,美国英语编码,同

ANSI

标准编码

*UTF-8

,同

unicode

编码

*GB2312

,同

gb2312-80,gb2312-1980

等编码

*GBK ,

MS936

,它是

gb2312

的扩充

及其它的编码,如韩文、日文、繁体中文等。同时,我们要注意这些编码间的兼容关体

系如下:

unicode

UTF-8

编码是一一对应的关系

GB2312

可以认为是

GBK

的子集

,即

GBK

编码是在

gb2312

上扩展来的。同时,

GBK

编码包含了

20902

个汉字,编码范围为:

0x8140-0xfefe

,所有的字符可以一一对应到

UNICODE2.0

中来。

再次,对于放在操作系统中的

.java

源程序文件,在编译时,我们可以指定它内容的编

码格式,具体来说用

-encoding

来指定。注意:如果源程序中含有中文字符,而你用

-encod

ing

指定为其它的编码字符,显然是要出错的。用

-encoding

指定源文件的编码方式为

GBK

gb2312

,无论我们在什么系统上编译含有中文字符的

JAVA

源程序都不会有问题,它都会正确地将中文转化为

UNICODE

存储在

class

文件中。

然后,我们必须清楚,几乎所有的

WEB

容器在其内部默认的字符编码格式都是以

ISO-8859-1

为默认值的,同时,几乎所有的浏览器在传递参数时都是默认以

UTF-8

的方式来传递参数的。所以,虽然我们的

Java

源文件在出入口的地方指定了正确的编码方式,但其在容器内部运行时还是以

ISO-8859-1

处理的。

4

、中文问题的分类及其建议最优解决办法

了解以上

JAVA

处理文件的原理之后,我们就可以提出了一套建议最优的解决汉字问题的办法。

我们的目标是:我们在中文系统中编辑的含有中文字符串或进行中文处理的

JAVA

源程序经编译后可以移值到任何其它的操作系统中正确运行,或拿到其它操作系统中编译后能正确运行,能正确地传递中文和英文参数,能正确地和数据库交流中英文字符串。

我们的具体思路是:在

JAVA

程序转码的入口和出口及

JAVA

程序同用户有输入输出转换的地方限制编码方法使之正确即可

具体解决办法如下:

1

针对直接在

console

上运行的类

对于这种情况,我们建议在程序编写时,如果需要从用户端接收用户的可能含有中文的

输入或含有中文的输出,程序中应该采用字符流来处理输入和输出,具体来说,

应用以下面向字符型节点流类型

对文件:

FileReader

FileWrieter

其字节型节点流类型为:

FileInputStream

FileOutputStream

对内存(数组):

CharArrayReader

CharArrayWriter

其字节型节点流类型为:

ByteArrayInputStream

ByteArrayOutputStream

对内存(字符串):

StringReader

StringWriter

对管道:

PipedReader

PipedWriter

其字节型节点流类型为:

PipedInputStream

PipedOutputStream

同时,应该

用以下面向字符型处理流来处理输入和输出

BufferedWriter

BufferedReader

其字节型的处理流为:

BufferedInputeStream

BufferedOutputStream

InputStreamReader

OutputStreamWriter

其字节型的处理流为:

DataInputStream

DataOutputStream

其中

InputStreamReader

InputStreamWriter

用于将字节流按照指定的字符编码集转换到字符流

,如:

InputStreamReader in = new InputStreamReader(System.in

"GB2312")

OutputStreamWriter out = new OutputStreamWriter (System.out

"GB2312")

例如:采用如下的示例

JAVA

编码就达到了要求:

//Read.java

import java.io.*;

public class Read {

public static void main(String[] args) throws IOException {

String str = "\n

中文测试,这是内部硬编码的串

"+"\ntest english character";

String strin= "";

BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in,"gb23

12")); //

设置输入接口按中文编码

BufferedWriter stdout = new BufferedWriter(new OutputStreamWriter(System.out,"g

b2312")); //

设置输出接口按中文编码

stdout.write("

请输入

:");

stdout.flush();

strin = stdin.readLine();

stdout.write("

这是从用户输入的串:

"+strin);

stdout.write(str);

stdout.flush();

}}

同时,在编译程序时,我们用以下方式来进行:

javac -encoding gb2312 Read.java

其运行结果如图

5

所示:

5

2

针对

EJB

类和不可以直接运行的支持类

(

JavaBean

)

由于这种类它们本身被其它的类调用,不直接与用户交互,故对这种类来说,我们的建

议的处理方式是内部程序中应该采用字符流来处理程序内部的中文字符串(具体如上面一节

中一样),同时,在编译类时用

-encoding gb2312

参数指示源文件是中文格式编码的即可。

3

针对

Servlet

针对

Servlet

,我们建议用以下方法:

在编译

Servlet

类的源程序时,用

-encoding

指定编码为

GBK

GB2312

,且在向用户输出

时的编码部分用

response

对象的

setContentType("text/html;charset=GBK");

gb2312

来设

置输出编码格式,同样在接收用户输入时,我们用

request.setCharacterEncoding("GB231

2")

;这样无论我们的

servlet

类移植到什么操作系统中,只有客户端的浏览器支

持中文显示

,就可以正确显示。如下是一个正确的示例:

//HelloWorld.java

package hello;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorld extends HttpServlet

{

public void init() throws ServletException { }

public void doGet(HttpServletRequest request, HttpServletResponse response) thr

ows IOException, ServletException

{

request.setCharacterEncoding("GB2312"); //

设置输入编码格式

response.setContentType("text/html;charset=GB2312"); //

设置输出编码格式

PrintWriter out = response.getWriter(); //

建议使用

PrintWriter

输出

out.println("


");

out.println("Hello World! This is created by Servlet!

测试中文

!");

out.println("


");

}

public void doPost(HttpServletRequest request, HttpServletResponse response) th

rows IOException, ServletException

{

request.setCharacterEncoding("GB2312"); //

设置输入编码格式

response.setContentType("text/html;charset=GB2312"); //

设置输出编码格式

String name = request.getParameter("name");

String id = request.getParameter("id");

if(name==null) name="";

if(id==null) id="";

PrintWriter out = response.getWriter(); //

建议使用

PrintWriter

输出

out.println("


");

out.println("

你传入的中文字串是:

" + name);

out.println("


你输入的

id

是:

" + id);

out.println("


");

}

public void destroy() { }

}

请用

javac -encoding gb2312 HelloWorld.java

来编译此程序。

测试此

Servlet

的程序如下所示:

function Submit() {

//

通过

URL

传递中文字符串值给

Servlet

document.base.action = "./HelloWorld?name=

中文

";

document.base.method = "POST";

document.base.submit();

}

传给

Servlet

其运行结果如图

6

所示:

6

4

JAVA

程序和数据库之间

为避免

JAVA

程序和数据库之间数据传递出现乱码现象,我们建议采用以下最优方法来处

理:

1

对于

JAVA

程序的处理方法按我们指定的方法处理。

2

把数据库默认支持的编码格式改为

GBK

GB2312

的。

如:在

mysql

中,我们可以在配置文件

my.ini

中加入以下语句实现:

[mysqld]

区增加:

default-character-set=gbk

并增加:

[client]

default-character-set=gbk

SQL Server2K

中,我们可以将数据库默认的语言设置为

Simplified Chinese

来达到目

的。

5

针对

JSP

代码

由于

JSP

是在运行时,由

WEB

容器进行动态编译的,如果我们没有指定

JSP

源文件的编码

格式,则

JSP

编译器会获得服务器操作系统的

file.encoding

值来对

JSP

文件编译的,它在移

植时最容易出问题,如在中文

win2k

中可以很好运行的

jsp

文件拿到英文

linux

中就不行,尽

管客户端都是一样的,那是因为容器在编译

JSP

文件时获取的操作系统的编码不同造成的(

在中文

wink

中的

file.encoding

和在英文

Linux

file.encoding

是不同的,且英文

Linux

f

ile.encoding

对中文不支持,所以编译出来的

JSP

类就会有问题)。网络上讨论的大多数是

此类问题,多是因为

JSP

文件移植平台时不能正确显示的问题,对于这类问题,我们了解了

JAVA

中程序编码转换的原理,解决起来就容易多了。我们建议的解决办法如下:

1

、我们要保证

JSP

向客户端输出时是采用中文编码方式输出的,即无论如何我们首先在

我们的

JSP

源代编中加入以下一行:

2

、为了让

JSP

能正确获得传入的参数,我们在

JSP

源文件头加入下面一句:

3

、为了让

JSP

编译器能正确地解码我们的含有中文字符的

JSP

文件,我们需要在

JSP

源文

件中指定我们的

JSP

源文件的编码格式,具体来说,我们在

JSP

源文件头上加入下面的一句即

可:

这是

JSP

规范

2.0

新增加的指令。

我们建议使用此方法来解

JSP

文件中的中文问题,下面的代码是一个正确做法的

JSP

文件

的测试程序:

//testchinese.jsp

String action = request.getParameter("ACTION");

String name = "";

String str = "";

if(action!=null && action.equals("SENT"))

{

name = request.getParameter("name");

str = request.getParameter("str");

}

%>

function Submit()

{

document.base.action = "?ACTION=SENT&str=

传入的中文

";

document.base.method = "POST";

document.base.submit();

}

提交

if(action!=null && action.equals("SENT"))

{

out.println("

你输入的字符为:

"+name);

out.println("

你通过

URL

传入的字符为:

"+str);

}

%>

如图

7

是此程序运行的结果示意图:

7

5

、总结

在上面的详细分析中,我们清晰地给出了

JAVA

在处理源程序过程中的详细转换过程,为我们正确解决

JAVA

编程中的中文问题提供了基础。同时,我们给出了认为是最优的解决

JAVA

中文问题的办法。

6

、参考资料

1

、段明辉

.Java

编程技术中汉字问题的分析及解决

.

http://www-900.ibm.com/developerWorks/cn/java/java_chinese/index.shtml

2

周竞涛

.

关于

Java

中文问题的几条分析原则

http://www-900.ibm.com/developerWorks/cn/java/l-javachinese/index.shtml

7

、作者介绍

作者:

abnerchai

,高级程序员,作者联系方法:

josserchai@yahoo.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ADC应用

数模转换(ADC)的应用笔记 智能时代,数字信号已体现在我们生活的方方面面,A/D,D/A是重要的基础。智能手机触摸信号需要转换为数字信号才能分辨触摸位置、数字去抖;打电话或者麦克风需要将模拟声信号转换为数字信号以便存…

springboot 禁用tomcat_Spring Boot 面试的十个问题

点击左上角蓝字,关注“SpringForAll社区”专注分享Spring周边技术内容用下面这些常见的面试问题为下一次 Spring Boot 面试做准备。在本文中,我们将讨论 Spring boot 中最常见的10个面试问题。现在,在就业市场上,这些问题有点棘手…

java oracle数据库连接代码,java连接oracle数据库代码实例(注释详解)

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class GetOracleConnection{/** Oracle数据库连接URL*/private final static String DB_URL "jdbc:oracle:thin:1…

javascript总for of和for in的区别?

for in是ES5标准,for of是ES6标准; for in是遍历对象属性,for of是遍历对象元素。 for of兼容性还不够,移动端安卓微信浏览器貌似不支持,苹果的可以;web端IE支持也不够,chrome可以。 先说结论: 推荐在循环对象属性的时候,使用for.…

go 怎么等待所有的协程完成_理解真实世界中 Go 的并发 BUG

点击上方蓝色“Go语言中文网”关注,回复「电子书」领全套Go资料有几个学生研究归纳了go编程中的并发bugs,发表了一篇(英文)论文:《Understanding Real-World Concurrency Bugs in Go》。为你下载好了 PDF,关注公众号 Go语言中文网…

java地图图表动态亮点,可视化图表行动指南:地表最强解读来了

原标题:可视化图表行动指南:地表最强解读来了身处信息技术高速发展的时代,数据价值日益凸显,然而如何将数据更好的展示,让别人一看就懂且眼前一亮可是一门大学问。此前,小亿在广大数友的强烈要求下结合前人…

matlab cell向量匹配向量,根据2个cell格式数据中的某二列进行匹配并合并

clear allacell(9,4); % a中的第1列为样本id, 第3列为日期bcell(6,3); % b中的第1列为样本id, 第3列为日期我想根据a中的第1列对应样本id和第3列对应日期与b中的第1列对应id和第3列对应日期进行匹配合并。a{1,1}name1;a{1,2}37; a{1,3}2010/9/1; a{1,4}4.5;a{2,1}name1…

python tfidf特征变换_Spark MLlib机器学习开发指南(4)--特征提取--TF-IDF

基于最新2.2.0版本翻译本节介绍和特征一起工作的算法,大致分为以下几类:提取:从原始数据提取特征转换:缩放,转换,或者修改特征选择:从一个大的特征集合里面选择一个子集局部敏感哈希(LSH)&#…

ASP.NET MVC 使用Swagger需要注意的问题!!!

之前,一直使用的微软自带的Microsoft.AspNet.WebApi.HelpPage来作为项目的接口文档,但总感觉有些不足,就准备采用Swagger。 在项目中引用Swagger很方便,直接Nuget搜索安装Swashbuckle就可以。但是,在使用的过程中&…

小波包能量matlab,小波包分析和小波包能量介绍.doc

小波包分析和小波包能量介绍基于五次谐波和小波重构能量的配电网单相接地故障的选线方法研究*孙其东,张开如,伊利峰,宋祥民,李娅芸(山东科技大学 电气与自动化工程学院 山东 青岛 266590)摘要: 对配电网经常发生的单相接地短路故障…

分块试水--CODEVS4927 线段树练习5

模板 1 #include<stdio.h>2 #include<algorithm>3 #include<string.h>4 #include<stdlib.h>5 #include<math.h>6 //#include<bitset>7 //#include<iostream>8 using namespace std;9 10 int n,m,q;11 #define maxn 10001112 #define…

【JVM】类的生命周期【转+整理】

参考如下三篇并整理。 1.Java类加载机制详解 2.深入理解Java&#xff1a;类加载机制及反射 3.jvm系列(一):java类的加载机制 类的生命周期是从被加载到虚拟机内存中开始&#xff0c;到卸载出内存结束。过程共有七个阶段。 1.加载---2.验证---3.准备---3.解析---5.初始化---6.使…

java概念,Java基础概念

1. Java编译程序将Java源程序翻译成JVM可执行代码-Java字节码。这一过程同C/C不同。当C编译器翻译成一个对象代码时&#xff0c;该代码是为在某一特定硬件平台运行而产生的。因此&#xff0c;在编译过程中&#xff0c;编译程序通过查表将所有符合引用转换为特定的内存偏移量。而…

【Excle】如何隐藏数据透视表中的错误值

如下&#xff1a;数据透视表出现错误怎么解决呢步骤方法①单击数据透视表任意单元格→数据透视表工具→分析→选项→勾选“对于错误值显示”→确定方法②右键→数据透视表选项&#xff08;同样可以修改&#xff09;转载于:https://www.cnblogs.com/OliverQin/p/8043469.html

vue怎么让接口带上cookie_在Vue中怎么使用cookie 之 vue-cookies

cookie 在工作中比较常用, 可以自行封装一些 添加/删除/获取cookie的方法, 可参考这个在Vue中有个很好用的插件 vue-cookiesgithub地址&#xff1a;https://github.com/cmp-cc/vue-cookies我们具体来看下怎么使用这个插件的使用第一步&#xff1a;安装vue-cookienpm install vu…

php 微信分享链接怎么弄,PHP实现 微信--分享朋友链接

不是些高深知识,但是第一次做,确实费了很多的时间.终于一点一点的扣了出来. 目前已经使用中.解决这个问题,总共碰到了几次BUG,1是生成的签名不对,自己打印出来,在去微信的签名算法页面一一核对.这时候如果对了,还是不成功.那就是需要动态获取URL链接的.最后需要将 函数写在为微…

MySQL中整型和字符串类型指定长度的含义

引入&#xff1a; int(5)和char(5)或者varchar(5)中的数字指的是什么意思&#xff1f;是字节数&#xff0c;还是字符长度&#xff1f;为什么在整型中指定了int(5)却可以输入123456&#xff1f; 答案是后者&#xff0c;不管是整型还是字符串类型&#xff0c;后面跟的数字都是字符…

php网站开发项目实战,PHP动态网站开发项目实战

任务1 分析网站需求11.1 知识准备11.1.1 功能结构图11.1.2 用例图21.2 任务实现51.2.1 花公子蜂蜜网站项目功能结构分析51.2.2 花公子蜂蜜网站项目用例分析61.3 经验传递71.4 知识拓展8任务2 设计网站前台版面92.1 知识准备92.1.1 网站版面设计流程92.1.2 网站版面设计原则102.…

repo同步代码_工欲善其事,必先利其器:repo 介绍

介绍此repo非彼repo。这里的repo&#xff0c;是指谷歌公司的一款小工具&#xff0c;名字就叫repo(我承认&#xff0c;这不是一个好名字&#xff0c;Google里面怎么搜都搜不到它的真身)。解决的问题有时候&#xff0c;我们需要在一台电脑上克隆很多个代码仓库&#xff0c;编译它…

洛谷 P1754 球迷购票问题

P1754 球迷购票问题 题目背景 盛况空前的足球赛即将举行。球赛门票售票处排起了球迷购票长龙。 按售票处规定&#xff0c;每位购票者限购一张门票&#xff0c;且每张票售价为50元。在排成长龙的球迷中有N个人手持面值50元的钱币&#xff0c;另有N个人手持面值100元的钱币。假设…