在项目开发中,经常会遇见中文字符串乱码出现,比如:从前台传到后台出现乱码,从后台存入数据库出现乱码,从后台到页面展示出现乱码。为了以后避免遇到类似问题,我们有必要对字符串从页面到数据,从数据库到页面,字符串会经过哪些编码关卡做个整理。

  1.从页面到后台出现中文乱码

  从页面提交数据到后台,会存在两种提交方式——get和post。针对这两种提交方式,会有不同的编码处理过程。

  get请求,经过Tomcat默认编码(tomcat8之前默认编码是ISO-8859-1,tomcat8之后改为UTF-8)进行前台数据编码,因为tomcat版本不同,我们做的操作也不一样,那么我们先说说tomcat8版本之前的做法,首先,我们在tomcat安装目录下找到sever.xml文件,同时在该文件中找到<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />代码,在该代码中添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat(默认ISO-8859-1编码)以UTF-8的编码处理get请求。修改后的代码:

<Connector port="8080"  protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

  post请求,request.getParamter()获取页面数据时,默认以ISO8859-1编码,针对这种情况,为了解决所有页面编码问题,我们可以写EncodingFilter进行request请求拦截,同时对所有接收的数据进行统一编码设置。关于该Filter的写法,不是此处详解,大家可以自行百度。

  2.从后台到数据出现中文乱码

  通常出现这种情况,多数是由于数据库的问题,因为前台传回来的数据通过上个步骤已经没问题,只要不做特殊处理,就不会出现中文乱码问题,但也有特殊情况,比如我最近遇见的,poi导入excel文件,后台接收时,遍历每行每列数据返回Object类型,需要用String强转存入数据库中,而问题就出现在这里,String存储数据时,如果不指定编码格式,会采用当前系统默认编码方式,据我查阅,windows平台的默认编码方式:gb2312,linux平台默认编码方式:utf-8。怎么去查询两个平台的默认编码。

  windows下,我们可以写个demo,代码如下:

public static void main(String[] args) {Properties p = System.getProperties();System.out.println(p.getProperty("file.encoding"));}

  linux下,通过命令:locale

  

  针对windows平台处理方式:

 new String(((String) Obejct).getBytes(),"utf-8");

  这步没问题了,剩下数据库了。在这一步我就遇见了大麻烦,出现的问题:在本地上传excel到数据库(mysql)没问题,而上传linux云服务器上(数据库也是msyql)就出现了乱码,经查阅资料,解决方法如下:

  a.查询linux服务器上mysql的数据库默认编码,代码如下:

show variables like 'character%';

  效果如下:

  b.修改my.cnf文件,代码如下:

vim /etc/my.cnf

 效果如下:

  在红色框标识的代码下,添加如下代码:

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

  重启mysql服务器(linux服务器版本:Centos 7),代码如下:

systemctl restart mysql.service

  如果遇见一直没有反应,则先关闭在启动达到重启效果,代码如下:

systemctl stop mysql.service  //关闭服务器
systemctl start mysql.service //启动服务器

  3.从后台到页面出现乱码

  可以在1步骤中的EncodingFilter中添加代码对response编码,示例代码如下:

response.setContentType("text/html;charset=utf-8");

 

转载于:https://www.cnblogs.com/yixtx/p/8426131.html

Javaweb项目中文乱码总结相关推荐

  1. 解决javaweb Tomcat中文乱码的完整思路。

    相信很多初学者在刚开始使用Tomcat的时候都被中文乱码问题所困扰过,我曾经也遇到了这个问题,苦苦搜寻各大社区,看了无数帖子,结果依然没有解决问题.原因有两个,一是我比较笨<,二是确实这个问题过 ...

  2. java web开发传智书城项目中文乱码

    干啥啥不行,乱码第一名! 引入JS文件乱码 Filter造成的乱码问题 数据库的乱码 引入JS文件造成的乱码问题 Filter造成的乱码问题 信息输出到数据库造成的乱码问题 起初遇到这些乱码问题的时候 ...

  3. tomcat启动乱码及访问项目中文乱码终极解决方法

    现在我们会发现部署在服务器上的tomcat启动时或者访问项目时都会出现乱码的情况,今天小编就整理了解决这些乱码的解决办法. 1.解决tomcat启动时黑框中出现乱码: (一般tomcat出现乱码都是字 ...

  4. java项目乱码_JavaWeb应用项目中文乱码的解决

    在把web项目成功部署到云主机后,通过浏览器成功地访问到了你的网站,却发现页面里本该由servlet传过来的中文参数值显示成了 ???  乱码.这是什么原因呢? 这可能是由于你的web项目所在系统的字 ...

  5. 东方通 启动服务访问不到_东方通 部署项目 中文乱码 问题解决

    背景: 做完项目国产化,在给客户部署的时候,客户发现,大量中文请求出现乱码问题 国产化环境采用,银河麒麟+人大金仓+东方通+Redis+火狐 排查手段: 第一步: 排查火狐问题,在本地启动项目,然后通 ...

  6. Tomcat 部署了web项目中文乱码

    本地Tomcat 启动,网页端的中文传到后台显示乱码. 查询前段已经设置了 UTF-8格式, 后台收到中文的依然是乱码,原来是Tomcat的配置问题. 修改Tomcat的配置文件server.xml ...

  7. eclipse导入项目中文乱码

    以下全部改成UTF-8编码格式 1.Window->Preferences->General->Workspace->Text file Encoding,修改成UTF-8 2 ...

  8. 项目中文乱码(jdk18乱码)

    在jdk18中配置完上面也可能那个会有问题.18默认为gbk编码. 需要在另外的配置 在输入框内输入-Dfile.encoding=GBK

  9. weblogic部署项目中文乱码

    解决方式在配置文件中添加如下配置 bin/startWebLogic.sh 即可解决此问题 JAVA_OPTIONS="${JAVA_OPTIONS} -Dfile-recoding=UTF ...

最新文章

  1. jquery下载教程
  2. 泛型(派生子类,泛型通配符,类型擦除)
  3. 《Python编程初学者指南》——1.6 回到Game Over程序
  4. python 把带小数的浮点型字符串转换为整数的解决方案
  5. 解读Raw Socket
  6. Vue Nuxtjs Cannot set property 'render' of undefined解决方法
  7. android横向排列 间隙,Android开发消除横向排列的多个Button之间的空隙
  8. 4.1 卷积神经网络调参-adagrad_adam
  9. C# 设置Word文档背景(纯色/渐变/图片背景)
  10. 元宇宙会是一场噩梦吗?
  11. MySQL事务操作原理与用法详解
  12. 影响历史进程的三只苹果
  13. 如何将整个splitcontainer控件缩小_将绣球花养成花球,整个夏天都是花团锦簇,教你如何将它调成蓝色...
  14. smart原则_如何利用SMART原则制定适合自己的高效学习计划
  15. linux 搜狗输入法变繁体字,搜狗输入法变成繁体字怎么办
  16. UMLChina公众号文章精选(20220126更新精选)
  17. 当C++遇上AUTOSAR编码规范,你的安全我来护航
  18. 输入一个数,判断它是否是素数,如果是素数输出yes,否则输出no
  19. 前端入门【HTML5】
  20. js百度地图鼠标绘制工具条库

热门文章

  1. python输出图像plt_Matplotlib(pyplot)savefig输出空白图像
  2. python动态人脸识别_python3.8动态人脸识别
  3. java调度问题的贪心算法_java代码,多机调度问题,怎么解释
  4. macos catalina cdr下载_这个开源神器可快速帮你安装 MacOS 虚拟机
  5. 计算机建模报告,计算机三维建模及分析实验报告单.doc
  6. python代码范文_Python any()用法及代码示例
  7. css就近原则_CSS的引入方式和优先级
  8. 301与302页面重定向
  9. python类中导入库_python导入库的具体方法
  10. python层次聚类_python中做层次聚类,使用scipy.cluster.hierarchy.fclusterdata方法 | 学步园...