请教:我用的jbuilder,struts架构,在action中的session赋中文值以后,回到jsp中,从session中取出的值为乱码,如何解决?

Java中文乱码问题全面解析及解决方案 在Java开发过程中,中文乱码问题是初学者乃至经验丰富的开发者都可能会遇到的一个常见困扰。本篇文章将深入剖析Java中中文乱码产生的原因,并提供一套全面、细致的解决方案,助力每一位Java学习者扫清字符编码障碍,确保程序在处理中文字符时能够准确无误。处理Java中文乱码的核心原则是遵循“统一编码、正确配置、明确处理”的原则,即保持编码的一致性,始终明确指定输入、处理和输出过程中的字符编码。同时,了解并遵循Java平台本身对编码的支持与处理机制也是十分重要的。 阅读详情
转载网上找到的文章:

现在有很多人都碰到过乱码问题,不停的发贴问,那么究竟有没有一种完全的解决方案呢?看看banq这位中国一流的java程序员是怎么说的。

Java/J2EE中文问题终极解决之道 
板桥里人 http://www.jdon.com 2005/06/29

  Java中文问题一直困扰着很多初学者,如果了解了Java系统的中文问题原理,我们就可以对中文问题能够采取根本的解决之道。

  最古老的解决方案是使用String的字节码转换,这种方案问题是不方便,我们需要破坏对象封装性,进行字节码转换。

  还有一种方式是对J2EE容器进行编码设置,如果J2EE应用系统脱离该容器,则会发生乱码,而且指定容器配置不符合J2EE应用和容器分离的原则。

  在Java内部运算中,涉及到的所有字符串都会被转化为UTF-8编码来进行运算。那么,在被Java转化之前,字符串是什么样的字符集? Java总是根据操作系统的默认编码字符集来决定字符串的初始编码,而且Java系统的输入和输出的都是采取操作系统的默认编码。

  因此,如果能统一Java系统的输入、输出和操作系统3者的编码字符集合,将能够使Java系统正确处理和显示汉字。这是处理Java系统汉字的一个原则,但是在实际项目中,能够正确抓住和控制住Java系统的输入和输出部分是比较难的。J2EE中,由于涉及到外部浏览器和数据库等,所以中文问题乱码显得非常突出。

  J2EE应用程序是运行在J2EE容器中。在这个系统中,输入途径有很多种:一种是通过页面表单打包成请求(request)发往服务器的;第二种是通过数据库读入;还有第3种输入比较复杂,JSP在第一次运行时总是被编译成Servlet,JSP中常常包含中文字符,那么编译使用javac时,Java将根据默认的操作系统编码作为初始编码。除非特别指定,如在Jbuilder/eclipse中可以指定默认的字符集。

  输出途径也有几种:第一种是JSP页面的输出。由于JSP页面已经被编译成Servlet,那么在输出时,也将根据操作系统的默认编码来选择输出编码,除非指定输出编码方式;还有输出途径是数据库,将字符串输出到数据库。

  由此看来,一个J2EE系统的输入输出是非常复杂,而且是动态变化的,而Java是跨平台运行的,在实际编译和运行中,都可能涉及到不同的操作系统,如果任由Java自由根据操作系统来决定输入输出的编码字符集,这将不可控制地出现乱码。

  正是由于Java的跨平台特性,使得字符集问题必须由具体系统来统一解决,所以在一个Java应用系统中,解决中文乱码的根本办法是明确指定整个应用系统统一字符集。

  指定统一字符集时,到底是指定ISO8859_1 、GBK还是UTF-8呢? 

  (1)如统一指定为ISO8859_1,因为目前大多数软件都是西方人编制的,他们默认的字符集就是ISO8859_1,包括操作系统Linux和数据库MySQL等。这样,如果指定Jive统一编码为ISO8859_1,那么就有下面3个环节必须把握:

  开发和编译代码时指定字符集为ISO8859_1。

  运行操作系统的默认编码必须是ISO8859_1,如Linux。

  在JSP头部声明:<%@ page contentType="text/html;charset=ISO8859_1" %>。

  (2)如果统一指定为GBK中文字符集,上述3个环节同样需要做到,不同的是只能运行在默认编码为GBK的操作系统,如中文Windows。

  统一编码为ISO8859_1和GBK虽然带来编制代码的方便,但是各自只能在相应的操作系统上运行。但是也破坏了Java跨平台运行的优越性,只在一定范围内行得通。例如,为了使得GBK编码在linux上运行,设置Linux编码为GBK。

  那么有没有一种除了应用系统以外不需要进行任何附加设置的中文编码根本解决方案呢?

  将Java/J2EE系统的统一编码定义为UTF-8。UTF-8编码是一种兼容所有语言的编码方式,惟一比较麻烦的就是要找到应用系统的所有出入口,然后使用UTF-8去“结扎”它。

  一个J2EE应用系统需要做下列几步工作:

开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。 
使用过滤器,如果所有请求都经过一个Servlet控制分配器,那么使用Servlet的filter执行语句,将所有来自浏览器的请求(request)转换为UTF-8,因为浏览器发过来的请求包根据浏览器所在的操作系统编码,可能是各种形式编码。关键一句:
request.setCharacterEncoding("UTF-8")。
网上有此filter的源码,Jdon框架源码中com.jdon.util.SetCharacterEncodingFilter
需要配置web.xml 激活该Filter。 
在JSP头部声明:<%@ page contentType="text/html;charset= UTF-8" %>。 
在Jsp的html代码中,声明UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下:
jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8
一般数据库都可以通过管理设置设定UTF-8 
其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等。 
     笔者以前在Jsp/Servlet时就采取这个原则,后来使用Struts、Tapestry、EJB、Hibernate、Jdon等框架时,从未被乱码困扰过,可以说适合各种架构。希望本方案供更多初学者分享,减少Java/J2EE的第一个拦路虎,也避免因为采取一些临时解决方案,导致中文问题一直出现在新的技术架构中。
【Windows】 解决联想为主的所有自带摄像头(integrate camera)打不开的毛病(特别点名小新、thinkbook、thinkpad、y7000...) 解决联想系列电脑打不开自带摄像头的问题 阅读详情

相关推荐

Python实战:从中国气象局天擎平台自动化获取与处理雷达基数据

本文详细介绍了如何利用Python脚本实现从中国气象局天擎平台自动化获取与处理雷达基数据。通过环境搭建、安全认证、核心代码编写及工程化优化,构建了一个包含自动查询、批量下载、错误重试和格式转换的完整数据管道,旨在帮助气象水文领域的研究者与数据分析师从繁琐的手动操作中解放出来,高效管理海量数据。

ipfs8storage的博客 927

JAVA国际化中文乱码

国际化对象ResourceBundleMessageSource(可以是别的实现对象)设置解析编码。直接网上找个Unicode转UTF-8在线转回来就可以了。1、项目文件使用的是GBK,正常显示;国际化配置文件中文变为Unicode码。2、项目统一改为UTF-8。

熊浪的博客 943

FreeRTOS:卡在configASSERT( ( pxQueue ) )问题的解决

FreeRTOS卡在configASSERT( ( pxQueue ) )问题的解决

qq_42007164的博客 9566

[转贴]Java/J2EE中文问题终极解决之道

现在有很多人都碰到过乱码问题,不停的发贴问,那么究竟有没有一种完全的解决方案呢?看看banq这位中国一流的java程序员是怎么说的。Java/J2EE中文问题终极解决之道 板桥里人 http://www.jdon.com 2005/06/29  Java中文问题一直困扰着很多初学者,如果了解了Java系统的中文问题原理,我们就可以对中文问题能够采取根本的解决之道。  最古老的解决方案是使用Stri

congliu的专栏 1056

深度学习之Pytorch---本人踩过的坑(报错总结)第十篇

深度学习之Pytorch安装时遇到的问题—本人踩过的坑(报错总结) 报错一:pip install torchvision 出现“由于目标计算机积极拒绝,无法连接”的问题 解决方案:找到自己浏览器的工具或选项,我的是火狐,具体解决方案如下图 然后找到桌面左下角,点击搜索internet,然后点击internet选项 最后回到Anaconda Prompt命令行输入pip install...

qq_41570307的博客 1914

agv调度系统3.0技术介绍

agv调度系统,穿梭车调度系统,调度系统技术介绍,教你做调度

持续分享调度系统开发过程 4869

Java Web国际化及乱码解决方案

一、背景 项目过程中,难免需要提示中文或者英文提示信息,有了国际化,方便切换; 实际项目中,一般都不允许直接把中文提示信息写在代码中,避免其他国家程序猿看不懂(国际化公司和开源项目涉及),也容易招来其他国家的恶意攻击。比如菊花公司把中文写在代码中就算成非常严重的违规。 二、目标 在项目中引入简单易用的国际化框架,方便同事使用。 三、步骤 Java SDK自带国际化API:java.uti...

编码之旅 2274

光学系统设计:波段、光源、光纤与探测器匹配指南

在光学测量和光纤通信系统中,波段、光源、光纤和探测器的匹配关系是系统设计的核心基础。波段指电磁波谱中的特定波长范围,光源负责产生特定波长的光信号,光纤作为传输介质需要与波长匹配以降低损耗,探测器则负责将光信号转换为电信号。理解各组件的光谱特性对于系统性能至关重要,例如在850nm短波长多模光纤系统中,VCSEL激光器与PIN光电二极管的组合能提供最佳性价比。典型应用场景包括生物医学成像、光纤通信和气体传感,其中光谱重叠优化、模场直径匹配和偏振特性协调是关键技术要点。通过实测数据对比不同组合的传输性能,可以为

weixin_33812433的博客 338

在Javaweb中出现泰文乱码问题

参考: 添加链接描述 原因: 因为FileWriter无法处理编码,虽然代码中使用format.setEncoding(“utf-8”),但只是把文件头指定为utf-8,写入的时候没有真正转码。只有使用OutputStream类的方法(此处使用继承类FileOutputStream)才能转码指定的编码。 解决方案: 将new XMLWriter(new FileWriter(vpath), format)中的FileWriter改为FileOutputStream ......

Resurrected_Eagle的博客 1301

微信小程序 - 实现人脸识别对比+人脸相似度数据,用户从相册选择或拍照上传两张图片进行人脸对比得到人脸相似度及判断是否是同一个人,微信小程序检测人脸相似度(免费纯前端方案+调用第三方API接口方案)

微信小程序实现人脸识别对比,微信小程序人脸对比 人脸对比识别 人脸对比相似度,实现获取手机摄像头权限,调用相机拍照实现人脸识别相似度对比,小程序人脸相似度对比,快速识别两张照片的相似程度(用百分比)图片相似度对比在线测试,图片相似度对比,微信小程序人脸相似度对比分析,计算两张人脸的相似度,从而判断是否同一个人,并给出相似度评分。小程序如何实现人脸相似度比对,小程序纯前端怎么对比两张图片的相似度,计算两幅图像的相似度,图像相似度对比方法,调用百度AI的人脸识别,微信小程序中实现人脸识别认证,实现人脸检测、人脸

🏆 前端领域优质创作者 4863

实战:利用 Agent Harness 自动化 PPT 制作

本文将带你从零开始,用轻量级Agent编排框架,结合主流大模型(GPT-4o、通义千问、文心一言等),搭建一套全自动化的PPT生成工作流:从用户输入自然语言需求,到需求解析、大纲生成、内容填充、数据匹配、排版美化、导出成品,全程不需要手动操作,最快10分钟就能产出符合要求的PPT。我们不会讲晦涩的Agent理论,所有步骤都有可直接运行的代码示例,哪怕你只有基础的Python语法基础,也能跟着一步步做出能用的自动PPT工具。

AI Agent Harness Engineering 569

JAVA中文乱码浅析及解决方案

中文乱码问题虽然复杂,但通过统一编码标准、正确处理字符编码、使用合适的字符流和IDE设置等方法,可以有效地解决这一问题。同时,不断学习和掌握新的编码技术和工具,可以提高编码效率和质量,减少乱码问题的发生。通过细致的排查和调试,相信开发者能够成功解决JAVA中的中文乱码问题。在JAVA编程中,中文乱码问题是一个常见且棘手的问题。乱码的出现不仅影响程序的正常运行,还会给用户带来极大的困扰。本文将详细分析中文乱码产生的原因,并提供几种常见的解决方案,帮助开发者更好地应对这一问题。一、中文乱码产生的原因。

qq_43341279的博客 1318

华为OD 面试手撕代码真题【判断链表是否有环】

华为OD 面试手撕代码真题【判断链表是否有环】

MISAYAONE的博客 7236

java中文乱码的解决

在基于JAVA的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。 这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。以前我也经常为这个问题而苦恼,后来经查了些资料,终于解决了,我知道一定有很多朋友也会碰到这个问题,所以特就总结了一下,来拿出来让大家一起分享了。 1、在网页中输出中文。 JAVA在网络

宏轩JAVA技术专栏 1430

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

javaweb国际化,国际化中出现中文乱码的解决方法

javaweb国际化,国际化中出现中文乱码的解决方法

qq_58862767的博客 1963

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ISO 8859 语言字符集详解

ISO/IEC 8859-1,又称Latin-1或“西欧语言”,是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入192个字母及符号,藉以供使用变音符号的拉丁字母语言使用。 此字符集支援部分于欧洲使用的语言,包括阿尔巴尼亚语、巴斯克语、布列塔尼语、加泰罗尼亚语、丹麦语、荷兰语、法罗语、弗里西语、加利西亚语、德语、格陵...

kuangbaoxu21110的专栏 1767

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JavaWeb中文编码问题

一、常见编码方式: 1、ASCII 码 众所周知,这是最简单的编码。它总共可以表示128个字符,0~31是控制字符如换行、回车、删 除等,32~126是打印字符,可以通过键盘输入并且能够显示出来的。 2、ISO-8859-1 它是基于ASCII码基础上扩展的,它总共能表示256个字符,涵盖了大多数西欧语言字符。ISO-8859-1编码不支持中文,举个中文编码例子:ISO-8859-1是单字节编码且...

zdd183的博客 1643

iso-8859-1表示中文汉字

中文汉字字符用"iso-8859-1"表示        你们应该都有遇到过这种问题,就是utf-8或者gbk编码格式的中文字符,若转成"iso-8859-1"编码格式,则会变成乱码,为什么呢?那我们得先知道以下知识点。        1.utf-8存储中文汉...

qq_42307562的博客 2万+

IDEA Java国际化控制台乱码

贴出代码 import org.junit.Test; import java.util.Locale; import java.util.ResourceBundle; public class App { @Test public void testI18N() throws Exception { //中国语言环境 Locale l

mickylily157766的博客 1317

实用干货!Java乱码问题原因及解决方案大全

最近有粉丝给壹哥发来私信,问我Java里的乱码问题该怎么解决,说是自己被乱码问题给弄的焦头烂额的。其实乱码问题解决起来很简单,很多人搞不定乱码是由于没有找到导致乱码的根本原因!试想,如果你都找不到导致乱码的根本原因,就去网上一通百度查找,即使网上的内容讲地头头是道,但结果还是不能解决自己的问题。于是你就得出结论,网上的文章都是垃圾........其实,这是因为自己没找到问题产生的根源,你没有对症下药啊大兄弟!对于一些有经验的开发者来说,想遇到乱码还真不容易,但对于一些新手来说,乱码几乎是家常便饭!所以壹哥今

一一哥 18万+

java 出现乱码如何解决

(一)post         [1]通过request.setCharacterEncodeing("UTF-8");         [2]通过String name = new String(request.getParameter("name").getBytes("ios8859-1"),"utf-8")         [3]在web.xml配置一个过滤器filter     

zpryan的专栏 2805

Java学习中遇到的中文乱码问题的整理和解决方法

Java学习的时候遇到的中文乱码的问题的整理和解决方法,中文乱码

weixin_44362089的博客 1万+

utf-8,gbk,gb2312区别

很多用户问GBK与UTF-8版本有什么区别,这边作了个整理如下: KesionCMS的GBK版本与UTF-8版本功能是一样的.只不过编码方式不同。 GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字

奋斗、 1446

Java中字符串与byte数组之间的转换方法

本文介绍了Java中字符串和byte数组之间的转换方法,包括将字符串转换为byte数组和将byte数组转换为字符串。其中,字符串的getBytes()方法和Charset类的encode()方法可以将字符串转换为byte数组,String的构造方法和Charset类的decode()方法可以将byte数组转换为字符串。本文将详细介绍Java中字符串和byte数组之间的转换方法,包括将字符串转换为byte数组和将byte数组转换为字符串。String的构造方法可以将一个byte数组转换为一个字符串。

我点评的博客 1万+

ISO-8859-1疑问

ISO 8859-1 又称Latin-1或“西欧语言”,是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入96个字母及符号,藉以供使用附加符号的拉丁字母语言使用。 ISO-8859-1的组成: 0-127 ASCII 128-159 没有定义 160-255 自定义 ASCII编码表 ISO-8859-1编码表 那么问题来

晚晴小筑 1467

GBK,UTF-8,和ISO8859-1编码区别与get,post请求中文乱码处理

1.编码基础知识          最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码,重要的有如下几个。  1.1. iso8859-1 通常叫做Latin-1       最多能表示的字符范围是0-255,应用于英文系列。比如,字母a的编码为0x61=97。        很明显,iso8859-1编码表示的字符范围很窄,无法

好习惯要坚持下去 8534
上一篇: java Integer.valueOf()方法
下一篇: JAVA中String与StringBuffer的区别
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值