现在的位置: 首页 > 综合 > 正文

Java中如何正确使用字体编码

2013年09月02日 ⁄ 综合 ⁄ 共 5146字 ⁄ 字号 评论关闭

Java中如何正确使用字体编码

 

Java支持UTF-8ISO-8859-1GBK等各种字体编码

 

影响Java中字体编码正确显示的有几个因素:

1)数据库的连接方式;

2)网页中使用的字体编码;

3)数据库里存放数据的字体编码;

4)Java的缺省字体编码。

如果在编程中遇到不能正确显示中文时,要先弄清楚以上几项所使用的字体编码.

 

 

一、数据库连接方式使用UTF-8

 

   在连接数据库的驱动后面加上这句参数useUnicode=true&characterEncoding=UTF-8

例如jdbc:mysql://localhost/DBVF?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8

从数据库里读出中文显示在使用GBKJSP的网页里,

 

如果数据库里存放的字体编码是UTF-8

JSP中使用:

      str=new String(rs.getBytes(1),"UTF-8")

 或者 str=rs.getString(1)

 

如果数据库里存放的是 GBK数据:

JSP中使用:

  str=new String(rs.getBytes(1),"GBK")

 

 

如果页面使用UTF-8,数据库里存放的是UTF-8

JSP使用:

    str=new String(rs.getBytes(1),"GBK")

 

如果网页是UTF-8,而数据库里存放的是GBK,无法直接显示中文,

   需要2步转换,

      str=new String(rs.getBytes(1),"GBK");

      str=new String(str.getBytes("UTF-8"),"GBK")

 

 

 

二、数据库连接方式使用GBK

 

    在连接数据库的驱动后面加上这句参数useUnicode=true&characterEncoding=GBK,

例如  jdbc:mysql://localhost/DBVF?autoReconnect=true&UseUnicode=true&characterEncoding=GBK

从数据库里读出中文,显示在使用GBKJSP的网页里,

 

如果数据库里存放的字体编码是UTF-8

JSP使用:

  str=new String(rs.getBytes(1),"UTF-8"),才正确显示中文。

 

如果数据库里存放的是GBK数据,

JSP使用:

   str=new String(rs.getBytes(1),"GBK")

   或者str=rs.getString(1)

 

如果网页是UTF-8,而数据库里存放的是GBK

JSP使用:

   str=new String(rs.getString(1).getBytes("UTF-8"),"GBK")

 

如果网页是UTF-8,而数据库里存放的是UTF-8

JSP使用:

     str=new String(rs.getBytes(1),"GBK")

     或者rs.getString(1)

 

三、使用缺省数据库连接方式

 

连接数据库的驱动后面没有这句参数useUnicode=&characterEncoding=

例如 jdbc:mysql://localhost/DBVF?autoReconnect=true,没有参数useUnicode=true& characterEncoding,表示使用默认的ISO-8895-1编码。

 

1. 从数据库里读出中文,显示在GBK的网页里。

 

如果数据库里存放的字体编码是UTF-8

JSP网页使用:

           str=new String(rs.getBytes(1),"UTF-8")

   或者str= new String(rs.getString(1).getBytes("ISO-8859-1"),"UTF-8")

 

如果数据库里存放的是GBK数据,

JSP网页使用:

      str=new String(rs.getBytes(1),"GBK")

  str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK")

 

2. 如果网页是UTF-8,不能直接正确显示GBK

 需要2步转换,

      str=new String(rs.getBytes(1),"GBK")

 str=new String(str.getBytes("UTF-8"),"GBK") 才可以正确显示中文。

 

如果数据库里存的是UTF-8

  直接用str=new String(rs.getBytes(1),"GBK")

     或者str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK")

 

以上是读取数据库里中文正确显示在网页上,下面三点是如何正确存入数据库。

 

四、数据库连接方式使用UTF-8编码

 

JSP中要把网页输入的中文存入数据库,通常有一个提交(Submit)的过程,是用str= request.getParameter("username")

然后执行update或者insert语句来存入数据库。如何赋值给str很重要,而且这里中文输入与网页所使用的字体编码有关。

 

1 网页使用UTF-8,使用

         str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")

     或者str= new String(request.getParameter("username").getBytes(),"UTF-8"),都可以使得存到数据库里的数据是UTF-8编码。

 

2. 网页使用GBK,使用

        str= new String(request.getParameter("username").getBytes(),"GBK"),那么存入数据库的是UTF-8编码。

 

3. 值得注意的是使用UTF-8的数据库连接方式不能存得GBK

 

 

 

五、数据库连接方式使用GBK编码

 

1. 输入使用GBK网页,

  存到数据库里是GBK的方法:

        str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK")

    或者str= new String(request.getParameter("username").getBytes(),"GBK")

 

2. 网页使用GBK,想存入UTF-8到数据库里,要分2:

    str=new String(request.getParameter("username").getBytes(),"GBK")

    str=new String(str.getBytes("UTF-8"),"GBK")即可。

 

3. 网页使用UTF-8,而且使用

      str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK")

  或者str= new String(request.getParameter("username").getBytes(),"UTF-8"),那么存到数据库里的数据是 UTF-8编码。

 

4. 网页使用UTF-8,而且使用

     str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")

     那么存到数据库里的数据是GBK编码。

 

 

六、数据库连接方式使用缺省,即不使用参数useUnicodecharacterEncoding

 

1. 网页使用GBK

    如果使用str= request.getParameter("username")

        或者str= new String(request.getParameter("username").getBytes()),那么在数据库里的数据是GBK码。

 

  网页使用 UTF-8

     使用str= request.getParameter("username"),则存入数据库是UTF-8编码。

 

2. 如果使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"))

   那么根据网页提供的字体编码而存到数据库里,

    比如是UTF-8的网页,那么存到数据库中就是UTF-8编码,

    如果使用GBK网页,那么存到数据库里的字就是GBK编码。

 

3. 如果使用str= new String(request.getParameter("username").getBytes("UTF-8"),"UTF-8")这一种组合能存到正确的数据外,

   其他存到数据库里的数据则都是乱码或者错误码。

   在这个UTF-8组合的特例中,

   网页使用的是GBK,则存放到数据库里就是GBK

  网页使用UTF-8,那么存到数据库里的就是UTF-8

 

4. 网页是GBK的要存得UTF-8

 一定需要2:

    company=new String(request.getParameter("company").getBytes(),"GBK")

  company=new String(company.getBytes("UTF-8"))

 

5. 网页是UTF-8的,不能存得GBK在数据库里,一句话,改变数据库连接方式不能存得GBK码。

 

以上所有的都是基于JSP网页和数据库交换数据,下面讨论一下纯JAVA编程下的字体编码转换。

 

 

七、数据库连接方式使用UTF-8编码

1. 数据库里的中文是UTF-8,可以转换为GBK,但不能把GBK存入数据库。

 

2. 数据库是GBK,如果转换为UTF-8,使用content=new String(rs.getBytes(2),"GBK")直接将content存入数据库就可为UTF-8

 

 

八、数据库连接方式使用GBK编码

 

1. 数据库里的中文是UTF-8,如果转换为GBK

   使用content= new String(rs.getString(2).getBytes(),"UTF-8"),

   再直接使用update或者insert语句插入到数据库,即存得GBK

 

  如果使用content= new String(rs.getString(2).getBytes(),"GBK")

  或者content= new String(rs.getString(2).getBytes()),再存入数据库即存得还是UTF-8编码。

 

2. 数据库里的中文是GBK,如果转换为UTF-8

   使用content= new String(rs.getString(2).getBytes("UTF-8"))

   或者content= new String(rs.getString(2).getBytes("UTF-8"),"GBK")

   再直接使用update或者insert语句插入到数据库,即存得UTF-8

 

3. 如果某个StringGBK,要转换为UTF-8

   也是使用content= new String(GBKstr.getBytes("UTF-8"))

   或者content= new String(GBKstr.getBytes("UTF-8"),"GBK");

   如果某个StringUTF-8,要转换为GBK,应该使用new String(UTFstr.getBytes("GBK"),"UTF-8")

 

 

九、数据库连接方式使用缺省,即不跟参数

  1. str2=new String(GBKstr.getBytes("UTF-8"),"ISO-8859-1"),可以将数据库里的GBK编码转换为UTF-8

 

  2. 读取UTF-8然后存入UTF-8,则用

         str1=new String(UTFstr.getBytes(),"ISO-8859-1")

     或者str1=new String(UTFstr.getBytes("GBK"),"ISO-8859-1")

 

  3. 不能实现数据库里的UTF-8转换为GBK

 

  如果采用UTF-8的数据库连接方式或者缺省数据连接方式,那么无法将UTF-8转为GBK

  GBK的数据库连接方式可以实现UTF-8GBK的相互转换。建议大家采用GBK的数据连接方式。

 

 

抱歉!评论已关闭.