使用JSP开发应用程序时的编码(中文等乱码)问题的建议解决方案(包括接受request和数据库操作)

解决response.setCharacterEncoding(“utf-8“);编译报红 word转pdf;解决response.setCharacterEncoding(“utf-8“);编译报红:依赖冲突 阅读详情

经常在讨论区看到有人问我的JSP显示中文有乱码怎么办,我用request得到的用户输入的中文怎么是乱码,我把汉字写到数据库怎么是乱码,等等一些关于汉字乱码的问题。
其实这个问题很简单,管它汉字不汉字,还是日文,还是其他的什么双字节的语言,我们一律把它当作UTF-8看待。
(一)request中的双字节文字
好下面我们就来实现在整个应用程序中使用UTF-8编码工作,之所以选择UTF-8不仅仅之于上述原因,我们知道java的就是基于在UTF-8之上的,所以我们选择UTF-8应该没错^_^
我们首先把我们的.java, .jsp文件都用UTF-8编码来保存,如果以前的没有用UTF-8保存也无所谓,但是建议以后写的都用UTF-8来保存。
并在.jsp里面写:<%@page contentType="text/html; charset=UTF-8"%>而不是<%@page contentType="text/html; charset=UTF-8"%>
然后在web.xml添加下面一段:
<web-app>
...
  <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>com.redv.projects.eduadmin.util.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
...
</web-app>

其中com.redv.projects.eduadmin.util.filters.SetCharacterEncodingFilter的代码如下:

package com.redv.projects.eduadmin.util.filters;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class SetCharacterEncodingFilter
    implements Filter {


  protected String encoding = null;

  protected FilterConfig filterConfig = null;

  protected boolean ignore = true;

  public void destroy() {

    this.encoding = null;
    this.filterConfig = null;

  }

  public void doFilter(ServletRequest request, ServletResponse response,
                       FilterChain chain) throws IOException, ServletException {

    // Conditionally select and set the character encoding to be used
    if (ignore || (request.getCharacterEncoding() == null)) {
      String encoding = selectEncoding(request);
      if (encoding != null) {
        request.setCharacterEncoding(encoding);           //就是这句话在工作的啦,哈哈,它:Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().
      }
    }

    // Pass control on to the next filter
    chain.doFilter(request, response);

  }

  public void init(FilterConfig filterConfig) throws ServletException {

    this.filterConfig = filterConfig;
    this.encoding = filterConfig.getInitParameter("encoding");
    String value = filterConfig.getInitParameter("ignore");
    if (value == null) {
      this.ignore = true;
    }
    else if (value.equalsIgnoreCase("true")) {
      this.ignore = true;
    }
    else if (value.equalsIgnoreCase("yes")) {
      this.ignore = true;
    }
    else {
      this.ignore = false;
    }

  }

  protected String selectEncoding(ServletRequest request) {

    return (this.encoding);

  }

}

这样,我们的request请求就是以UTT-8编码的,在JSP程序中就可以使用:request.getParameter("myKey")来直接得到UTF-8编码的字符串了,而不需要像这样:new String(request.getParameter("myKey").getBytes("ISO-8859-1"), "GBK")来解决那些乱码了。

(二)数据库处理的双字节文字 http://www.upas.org/java/DatabaseEncodingProblemSolution/
另外一个,就是写入数据库的问题,我们知道我们在使用mysql的时候可以改用这样的url来处理汉字编码问题:jdbc:mysql://localhost:3306/upas?useUnicode=true&characterEncoding=gb2312,
那么对于那些我们无法像mysql这样解决的怎么办呢?难道我们每次都这样写吗:
import java.sql.*;

Class.forName("org.gjt.mm.mysql.Driver");
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
  con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
  pstmt = con.prepareStatement("SELECT f3, f4 FROM tbl1 WHERE f1 = ? AND f2 = ?");
  pstmt.setString(1, new String(f1.getBytes("GBK"), "ISO-8859-1");
  pstmt.setString(2, new String(f2.getBytes("GBK"), "ISO-8859-1");
  rs = pstmt.executeQuery();
  String f3, f4;
  while(rs.next()) {
    f3 = new String(rs.getString(1).getBytes("ISO-8859-1"), "GBK");
    f4 = new String(rs.getString(2).getBytes("ISO-8859-1"), "GBK");
  }
}
finally {
  //close resouces
  ...
}

其实我们完全可以这样写:
import java.sql.*;
import com.redv.sql.encoding.*;

Class.forName("org.gjt.mm.mysql.Driver");
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
  con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
  //接管数据库连接实例
  boolean coding = true;
  EncodingConnection codingConnection = new EncodingConnection(con, coding, "ISO-8859-1", "GBK");
  //获得接管后的数据库连接实例,以后直接使用con已经是经过EncodingConnection重新包装过的实例
  con = codingConnection.getConnection();
  pstmt = con.prepareStatement("SELECT f3, f4 FROM tbl1 WHERE f1 = ? AND f2 = ?");
  pstmt.setString(1, f1);
  pstmt.setString(2, f2);
  rs = pstmt.executeQuery();
  String f3, f4;
  while(rs.next()) {
    f3 = rs.getString(1);
    f4 = rs.getString(2);
  }
}
finally {
  //close resouces
  ...
}

看看,怎么样,我们只需要在获取数据库连接的地方稍微修改一下,甚至我们可以把它当作参数保存在 properties里面,改变coding的布尔值来设定是否使用自动编码转换。常常我们可以使用一个Database类来封装获取数据库连接的那段getConnection,以便于我们可以从 javax.sql.DataSource中获取到数据库连接。这个时候我们仅仅需要修改我们的Database类即可,而不用去搜索所有使用了rs.setString(), rs.getString()的地方去加入我们的编码转换代码了。甚至我们在使用con.createStatment()语句时,即使我们sql语句含有汉字或者其它的双字节字符时一样没有问题:
SELECT 姓名, 性别 FROM 学生表 WHERE 班级 LIKE '%计算机%'

好了,就说这么多了,欢迎大家有什么好的点子或者好的解决方案,一起讨论;另外,有什么问题,欢迎提出,我会尽我所学给大家解答的。

 

 

JSP表单提交中文乱码问题解决方案详解 htmltable {th, td {th {pre {简介:在JSP开发中,用户提交包含中文的表单时常出现乱码问题,主要源于浏览器、HTTP请求、服务器和数据库之间编码不一致。本文详细解析了从页面编码设置、表单提交、服务器端请求处理、数据库存储到响应输出的全流程中文编码处理方法。通过合理配置UTF-8编码策略,并在关键环节进行编码统一,可有效避免中文乱码,确保Web应用正确处理中文数据。 阅读详情

相关推荐

unet学习笔记(milesial/Pytorch-UNet)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 unet学习笔记(milesial/Pytorch-UNet)原理讲解unet_parts.py内容predict.py内容 所用到的代码Pytorch-UNet/predict.py at master · milesial/Pytorch-UNet ·GitHub 原理讲解 蓝/白色框表示 feature map; 蓝色箭头表示 3x3 卷积,用于特征提取; 灰色箭头表示skip-connection,用于特征融合; 红色箭头.

weixin_67138138的博客 2553

response.setCharacterEncoding(charset) 报错

eclipse tomcat服务启动运行项目,代码 response.setCharacterEncoding(charset)标红 我自己百度了很多,有一个说法是最靠谱的: HttpServletResponse存在于servlet-api.jar中, 2.3版本的servlet-api.jar中HttpServletResponse没有setCharacterEncoding方法。 2.4版本才有。需要将项目中的jar更新即可。 而关联上tomcat之后,classpath中的jar又丰富了,2.4版本

weixin_44389353的博客 4123

vins-mono前端详解(2)——imu预积分

本篇文章详细讲解了vins-mono中imu预积分内容,包括复杂的公式推导。

weixin_44587828的博客 1195

[转载]setCharacterEncoding

在JAVA WEB开发中使用setCharacterEncoding()设置编码2008年04月11日 星期五 14:431、对于request,是指提交内容的编码:      指定后可以通过getParameter()则直接获得正确的字符串,如果不指定,则默认使用iso8859-1编码,需要进一步处理。参见下述"表单输入"。值得注意的是在执行setCharacterEncod

hitustc的专栏 1253

上下文理解的AI增强方案:AI应用架构师的架构洞察

本文将从AI应用架构师的视角,深入探讨“上下文理解”的技术本质、核心挑战,以及一套可落地的上下文增强架构方案。我们会拆解上下文理解的底层需求,分析架构设计中的关键决策,并通过具体案例展示如何构建一个能“记住过去、理解现在、预测未来”的AI系统。三个维度:上下文的内容范围(短期/中期/长期)、数据类型(文本/结构化/多模态)、技术挑战(窗口限制/信息过载/跨会话一致性);三种架构模式:分层上下文存储(热/冷数据分离)、上下文路由(按需筛选)、动态压缩(适配模型窗口);四个关键组件。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 220

多核系统核间通信(IPC)设计:从硬件机制到软件实现

在多核处理器与嵌入式系统设计中,核间通信(IPC)是实现计算资源协同工作的核心技术。其原理基于共享内存、硬件邮箱与中断等底层硬件机制,通过构建结构化的消息传递通道,实现核间高效、可靠的数据交换。该技术的核心价值在于打破多核间的壁垒,将分散的计算单元整合为有机整体,从而显著提升系统整体性能与响应能力。在工程实践中,IPC广泛应用于智能座舱、边缘AI网关、实时控制系统等场景,用于处理如仪表显示、AI推理、实时控制等复杂任务。本文聚焦于基于共享内存与VRING的消息队列实现,深入剖析缓存一致性、内存屏障等关键问题

weixin_27006759的博客 597

request.setCharacterEncoding()报错

IDEA中,request.setCharacterEncoding()一直标红,并且发现在jsp页面上有一部分导入资源没有用到并且显示未找到该文档。导入jar包后问题迎刃而解--nice!点击文件>项目结构>模块……然后疯狂寻找哪里资源没有导入的时候。

m0_52241621的博客 1094

一个固定翼飞机仿真程序带你系统性上手如何实现配平(工具箱+脚本)

老规矩,该博客所用的模型和脚本已上传至百度网盘,名字为“固定翼配平训练例子”,自己自取。

zouxu634866的博客 2570

request.setCharacterEncoding问题

以下红字为浏览stackoverflow后的总结,未进行实验,源贴: 点击打开链接 这里要说一下request.setCharacterEncoding(编码方式的字符串) 这个方法只是通知Tomcat按何种编码解码用户请求后交给对应Servlet处理,不会改变底层的二进制!另外,这个方法只对没有处理的POST请求有效,如果我们不调用该函数,Tomcat会用默认编码解码。 GET请求是

菜到怀疑人生的博客 2748

Unreal Engine鸿蒙移植实战:环境配置、构建流程与性能优化指南

游戏引擎移植是跨平台开发中的关键技术环节,其核心原理在于通过适配目标操作系统的底层接口和工具链,实现同一套代码在不同硬件和软件环境下的高效运行。这项技术的价值在于最大化代码复用率,降低多平台维护成本,并能让应用快速触达新兴生态系统的用户。在移动游戏和XR应用领域,随着鸿蒙HarmonyOS生态的快速发展,将成熟的商业引擎如Unreal Engine迁移至此平台,成为开发者探索新市场机会的重要路径。本文聚焦于Unreal Engine项目向鸿蒙系统的移植实践,详细解析了从环境搭建、源码适配到构建打包的全链路流

weixin_29011395的博客 410

4、机器人建模、规划与控制及运动学知识解析

本博客深入解析了机器人建模、规划与控制的核心内容,涵盖运动学与动力学的基本原理,并结合典型应用场景探讨了移动机器人与操作器的控制策略。同时,博客还介绍了机器人技术的发展趋势及其在工业和服务领域的广泛应用。

desk3的博客 123

解决Servlet中文乱码问题

一、出现乱码的原因   由于浏览器默认使用UTF-8码表进行编码,而servlet使用ISO-8859-1码表进行编码,传输和接收方编码不一致导致乱码的产生。中文乱码就是因为编码不符,可能出现乱码有四个地方: 1 JSP编码乱码 2 HTML编码乱码 3 request获取数据乱码 4 response输出信息乱码 二、乱码的类型以及解决办法 1、Html中文乱码问题。 ...

一名北漂Java程序员的学习记录! 1万+

深度强化Q学习-基于微软AirSim仿真环境的自动驾驶案例(原理代码详解简易可行)

最近在学习《强化学习原理与Python实现》,肖智清著。参考第十二章的自动驾驶案例,写一篇总结,尽量做到简单可行,让有志于自动驾驶的小伙伴可以通过此篇博客可以管中窥豹,初步了解自动驾驶的强化学习训练过程。 本篇将自动驾驶问题转化为回合制的强化学习任务,设计以车辆观察图像和运行状态为输入的自动驾驶算法,并在AirSim仿真环境中进行训练和测试。本篇使用带经验回放和目标网络的基于深度Q网络算法设计并实现智能体,对经验回放、目标网络和深度Q学习算法进行简单介绍,并用代码实现。

shao918516的博客 8599

JSP中request中文乱码问题

由于在JSP中默认的编码格式是ISO-8859-1,也就是request.getParameter("username");都是按照ISO-8859-1的编码格式来的。就算你把charset与pageEncoding设置成了UTF-8也不起作用的。如: String username = request.getParameter("username"); //String us...

amazinx的博客 1162

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jsp全是问号_JSP response,request中文乱码(出现问号)总结

JSP response,request中文乱码(出现问号)总结java中request乱码是浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码,response乱码是服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码。其实产生中文乱码的原因就是客户端和服务器所使用的编码不同。1.response中文乱码服务器发给浏览器的数据默认是按照ISO-8859-1编码,...

weixin_29144939的博客 3616

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Eclipse中 .jsp 文件中文乱码

之前总是碰到JSP页面乱码的问题,每次都是直接去网上搜,然后胡乱改,改完也不明白原因。这次正好做一下总结,中文乱码就是因为编码不符,可能出现乱码有五个地方: JSP编码乱码 HTML编码乱码 request获取数据乱码 response输出信息乱码 Cookie导致的编码问题 下面将会对上面几种情况进行介绍: JSP乱码 套用之前设计好的html页面遇到的一个问题,就是将静态html...

IT界幼稚生的博客 5178

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

解决JSP中文乱码问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.youkuaiyun.com/erlian1992/article/details/51892025 之前总是碰到JSP页面乱码的问题,每次都是现在网上搜,然后胡乱改,改完也不明白原因。 这次正好作下总结,中文乱码就是因为编码不符,可能出现乱码有四个地方: 1 JSP编码乱码 2 HTML编码乱码 3 request获取数据乱码 4 response输出信息乱码 5 Cookie

d1018908563的博客 2025

jsp超参数传递中文乱码400问题,以及解决中文乱码的全面总结。

目录 问题出现过程: 页面编码错误: 数据传递中的编码错误:    1、request带参数传递(接收数据) 2、response带参数传递(发送数据) 问题出现过程: NewFile.jsp的我的代码: &lt;% String haha="关于"; %&gt; &lt;a href="NewFile1.jsp?name=&lt;%=haha %&gt;"&gt;添加用户&lt...

aic1999的博客 1万+

【JavaWeb】解决request和response的中文乱码问题

转自:request和response的中文乱码问题 问题概述 request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符, 服务器获取到的请求参数的值是乱码; response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码; 乱码产生的原因: 不管是request乱码还是response乱码,其实都是由于客户端(浏览器)跟服务器端采用的编码格式不一致造成的。 以request乱码为例:浏览器向服务器发送请求,因为浏览器与服务器之间的通信实质上是socket流,所以要先将请

SuperSources的博客 5297

sevlet使用request-获取参数和中文乱码问题

sevlet使用request-获取参数和中文乱码问题 servlet代码: package com.lbl.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.ht

水巷石子的博客 1803

jsp使用request.getParameter时显示乱码的解决方案

Tomcat 7在使用request.getParameter获取前面页面传来的参数值时,会出现乱码的现象,解决方案有两种: 1:使用: <%=new String(request.getParameter("username").getBytes("iso-8859-1"),"UTF-8") %> 代替: <%=request.getParameter("username")...

qq_42092076的博客 1442

解决JSP中使用request乱码问题

本篇文章由泉州SEOwww.234yp.com 整理发布,jsp虚拟主机www.234yp.com/Article/176251.html谢谢合作!jsp虚拟主机   经常在讨论区看到有人问我的JSP显示中文有乱码怎么办,我用request得到的用户输入的中文怎么是乱码,我把汉字写到数据库怎么是乱码,等等一些关于汉字乱码的问题。   其实这个问题很简单,管它汉字不汉字,还是日文,还是其他的什么双字节的语言,我们一律把它当作UTF-8看待。   (一)request中的双字节文字   好下面我们就来...

677

Java/JSP中文乱码问题解决心得

Java/JSP中文乱码问题解决心得作者信息:liqian  liqianbnu@126.com   http://blog.vschool.net.cn/liqian/文章原始出处:http://blog.vschool.net.cn/liqian/000271.html自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的

xxxuehao的专栏 1871
上一篇: JBuilder开发技巧
下一篇: J2EE 组件开发:实体EJB
yl113
博客等级 码龄25年 0粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值