• JAVA ,SSH中文及其乱码问题的解决 6大配置点 使用UTF-8编码


    JSP,mysql,tomcat下(基于struts2)中文及其乱码问题的解决 6大配置点 使用UTF-8编码

    目前对遇到J2EE 开发中 中文及其乱码问题,参考网上资料做个总结, 主要是6大配置点:

    1 struts2配置 2 数据库 3 页面 4 jdbc连接 5 tomcat 6.hibernate配置

    以下解决方法不分顺序,大家按照自己的配置对比,同时也欢迎大家补充

    1 struts2配置

     struts2在配置struts.properties文件中加上struts.i18n.encoding=UTF-8 或者在struts.xml里加上<constant name="struts.i18n.encoding" value="UTF-8" /> 有的朋友说加上struts.locale=zh_CN,但是我的struts.locale为en_GB没有问题.

     

    2 tomcat

    为了保证get/post数据都采用相同的UTF8编码,我们在server.xml中进行了如下设置: 

    <Connector port="8080" protocol="HTTP/1.1"                

    connectionTimeout="20000"               

     redirectPort="8443" 

     URIEncoding="UTF-8" />

    其中,当当使用IIS作为webserver转发servlet/jsp请求时IIS是通过AJP协议,把请求转发到Tomcat监听的8009端口,所以需要配置端口8009的URIEncoding为UTF-8.

    3 页面

    每个页面上加上<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> 这样在jsp页面里,点右键,查看编码方式则为UTF-8.

    4 jdbc连接

     设置characterencoding为UTF-8 如jdbc.mysql.url=jdbc:mysql://localhost:3306/db?useUnicode=true&amp;characterEncoding=UTF8

     

    5. Hibernate 配置

    在hibernate.cfg.xml配置文件中加入这些来完成的

    1. <property name="connection.useUnicode">true</property>   
    2. <property name="connection.characterEncoding">UTF-8</property>


     

    6 数据库

      

    MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8。
    1、需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:&gt;mysql -u root –p,之后两次输入root用户的密码),查看数据库的编码方式命令为:
    show variables like 'character%'; 
    +--------------------------+----------------------------+ 
    | Variable_name | Value | 
    +--------------------------+----------------------------+ 
    | character_set_client | latin1 | 
    | character_set_connection | latin1 | 
    | character_set_database | latin1 | 
    | character_set_filesystem | binary | 
    | character_set_results | latin1 | 
    | character_set_server | latin1 | 
    | character_set_system | utf8 | 
    | character_sets_dir | /usr/share/mysql/charsets/ | 
    +--------------------------+----------------------------+
    从以上信息可知数据库的编码为latin1,需要修改为gbk或者是utf8;
    其中,character_set_client为客户端编码方式;character_set_connection为建立连接使用的编码;character_set_database数据库的编码;
    character_set_results结果集的编码;
    character_set_server数据库服务器的编码;
    只要保证以上四个采用的编码方式一样,就不会出现乱码问题。
    另一个查看数据库编码的命令:
    show variables like ‘collation%’;

     

    linux系统下,修改MySQL数据库默认编码的步骤为:
    • 停止MySQL的运行 
      /etc/init.d/mysql start (stop) 为启动和停止服务器
    • MySQL主配置文件为my.cnf,一般目录为/etc/mysql
    var/lib/mysql/ 放置的是数据库表文件夹,这里的mysql相当于windows下mysql的date文件夹
    • 当我们需要修改MySQL数据库的默认编码时,需要编辑my.cnf文件进行编码修改,在linux下修改mysql的配置文件my.cnf,文件位置默认/etc/my.cnf文件 
      找到客户端配置[client] 在下面添加 
      default-character-set=utf8 默认字符集为utf8 
      在找到[mysqld] 添加 
      default-character-set=utf8 默认字符集为utf8 
      init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行) 
      修改好后,重新启动mysql 即可,重新查询数据库编码可发现编码方式的改变:
    &gt;show variables like 'character%'; 
    +--------------------------+----------------------------+ 
    | Variable_name | Value | 
    +--------------------------+----------------------------+ 
    | character_set_client | utf8 | 
    | character_set_connection | utf8 | 
    | character_set_database | utf8 | 
    | character_set_filesystem | binary | 
    | character_set_results | utf8 | 
    | character_set_server | utf8 | 
    | character_set_system | utf8 | 
    | character_sets_dir | /usr/share/mysql/charsets/ | 
    +--------------------------+----------------------------+ 
    此方法用于标准mysql版本同样有效,对于/etc/my.cnf文件,需要从mysql/support-files的文件夹cp my-large.cnf一份到/etc/my.cnf
    3、windows系统下可以删除MySQL数据库,并重新安装,在安装过程中可以直接用Mysql Server Instance Config Wizard 进行设置
    4、当MySQL数据库服务器已经有数据不适合删除重装时,可以个别指定数据库的编码方式。MySQL指定编码的方式是非常灵活并多样化的,可以指定表级别的编码,行级别编码,甚至可以指定字段级别的编码。
    以下示例给出创建数据库时指定编码的两种方式:
    1)CREATE DATABASE ms_db CHARACTER SET utf8 COLLATE utf8_general_ci;
    2)create database if not exists netctoss default character set utf8;
    5、如果你采用的是外部接入的方式,可以在连接中确定请求的编码格式如:jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8(注意:不要出现任何空格,否则出错)
    6、执行脚本:指定编码格式set names gbk(注意,不是UTF-8)可以修改
    执行前:
    执行后:
    从执行命令前后可知,set names gbk只可以修改character_set_client、character_set_connection、character_set_results的编码方式,并且这种修改是窗口级别的,只针对本窗口有效,打开另外一个窗口修改无效。也可发现数据库底层的编码方式没有改变,插入数据后还是以utf8编码方式保持。

     

    MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码)

    MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明.

    MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以UTF-8为例来说明

    需要注意的是,要修改的地方非常多,相应的修改方法也很多。下面是一种最简单最彻底的方法:

    一、Windows系统下面
    1、中止MySQL服务
    2、在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini即可
    3、打开my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭(mysqld中增加如果出错,可以试 character-set-server=utf8
    4、启动MySQL服务

     

    二、Linux系统下面
    1、中止MySQL服务(bin/mysqladmin -u root shutdown)
    2、在/etc/下找到my.cnf,如果没有就把MySQL的安装目录下的support-files目录下的my-medium.cnf复制到/etc/下并改名为my.cnf即可
    3、打开my.cnf以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭
    4、启动MySQL服务(bin/mysqld_safe &)

    非常简单,这样的修改一劳永逸,今后MySQL一切相关的默认编码均为UTF-8了,创建新表格的时候无需再次设置

    需要注意的是,当前数据库中已经存在的数据仍保留现有的编码方式,因此需要自行转码,方法在网上有很多,不再赘述


  • 相关阅读:
    GPU CUDA之——深入理解threadIdx
    需求分析、业务逻辑与数据结构
    软件建模的本质
    浅谈软件需求建模
    软件建模即程序设计
    软件开发从0到1与软件建模
    数据模型所描述的内容包括三个部分:数据结构、数据操作、数据约束。
    观察力与信息搜集能力
    人类为什么写书
    鲁宾斯坦说:"思维是在概括中完成的。"
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3299625.html
Copyright © 2020-2023  润新知