java 中文乱码问题

Java中文乱码问题全面解析及解决方案 在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的第一个拦路虎,也避免因为采取一些临时解决方案,导致中文问题一直出现在新的技术架构中。
Unity Shader Graph 2D - Procedural程序化图形转动的环状六边形 Hexagon又称六边形,在游戏中是十分常见的基础形状,本文将使用程序化的六边形来制作多个环状六边形叠加的转动动画效果,实践Unity Shader Graph中的常用节点功能。 阅读详情

相关推荐

(八)基于MuJoCo的LeRobot SO100仿真操控实战指南(操作优化)

本文详细介绍了如何在MuJoCo仿真环境中搭建并优化LeRobot SO100机械臂的操控。通过两种核心模式(纯键盘仿真与实机镜像同步)的实战演示,重点讲解了关键的参数标定方法,以实现虚拟模型与真实硬件的精准同步。文章还提供了性能优化技巧,旨在帮助开发者构建高效、安全的机器人算法开发与测试流程。

weixin_29083649的博客 320

JAVA国际化中文乱码

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

熊浪的博客 944

AD元件库构建及维护之——DbLib公共元件库的使用教程

AD元件库构建及维护之——DbLib元件库的使用教程

qq_43105486的博客 2万+

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

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

congliu的专栏 1056

银河麒麟服务器操作系统V10-SP1部署gitlab服务

银河麒麟高级服务器操作系统 V10 SP1 部署GitHub

weixin_43173670的博客 2156

逐行逐句进一步了解SurroundOcc(一)

通过分析中的模型构建过程,理解了从配置文件到模型实例化的整个流程。构建过程的核心是通过build和等函数,逐步将配置文件解析并生成模型的各个模块对象,最终组合成一个完整的模型结构。这一过程涉及多个类和函数的调用,其中函数是生成对象的关键,它能够从配置字典中提取必要信息并生成对应的类实例。

lovely_yoshino的博客 8114

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

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

编码之旅 2274

主成分分析(Principal Component Analysis,PCA)

主成分分析1.主成分分析1.1 降维(Dimensionality Reduction)1.2 均值(Mean)1.3 方差(Variance)1.4 协方差(Covariance)1.5 协方差矩阵(Covariance Matrix)1.6 线性变换(Linear Transformation)1.7 主成分分析(PCA)1.8 PCA和SVD的关系 1.主成分分析 关于PCA的介绍:用最直观的方式告诉你:什么是主成分分析PCA 笔记来源:Principal Component Analysis (PC

一个搬运知识的笨小孩 3235

在Javaweb中出现泰文乱码问题

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

Resurrected_Eagle的博客 1302

【第24例】华为 IPD 体系 | RMT 需求管理团队

RMT需求管理团队

产品线负责人 1769

蓝牙配对鉴权过程深度剖析:Just Works/Numeric Comparison/Passkey Entry/OOB 协议流程

当你新买的智能手表与手机配对时,是否遇到过这样的情况:有时只需在手机上点击 "确认" 即可完成配对,有时却需要在手表上输入手机显示的 6 位数字,而连接车载蓝牙时可能又需要输入固定密码?这些差异背后,是蓝牙配对鉴权机制在默默工作。蓝牙配对鉴权是设备间建立安全连接的核心环节,直接关系到数据传输的保密性和设备身份的真实性。​

byte轻骑兵的技术小窝 3578

Java读写中文文件,解决中文乱码问题

Java读写中文文件,解决中文乱码问题。 关于Java读写中文文件解决中文乱码的问题分析,原因查找,解决思路,及解决方案。

kingscoming的博客 3万+

YOLOv11缝合改进Conv | SAConv在YOLOv11中的应用可切换空洞卷积与性能提升(附代码)

在本篇文章中,我们将深入探讨如何通过引入**SAConv**(Switchable Atrous Convolution,可切换空洞卷积)来优化YOLOv11网络结构,特别是在卷积操作方面的创新。我们会解析SAConv的核心原理和架构设计。

一键难忘的博客 956

docker java 镜像中文乱码问题解决

转眼十多年过去了,从年轻的少年成为了中年油腻大叔.为了更好的生存,这段时间在学习java学习docker.但过程中出现了CentOS中java docker镜像的乱码问题; 先来看看问题现象: 运行docker后出现了中文?号 开始以为是SSH终端问题,检查并设置为UTF-8 再次查看问题依旧.乱码 百度了下,说是需要用locale检查本地语言环境.于是 添加中文环境编码,安装两个包 yum install kde-l10n-Chinese -y yum insta...

skybot的专栏 5679

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java读取中文的乱码问题

最近在解析一堆文件,有gbk的,有UTF-8的,处理过程中碰到了乱码问题,相信很多做过相关工作的人都有类似经历。和中文编码相关的有几个地方:1. 原始文件的编码(Input的编码)2. 希望输出的编码(Output的编码)3. Eclipse的默认字符集编码 (项目->右键Properties->Text file encoding)文件本质上是一个字节流:    file: Byte1 Byte

智障大师 的专栏 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java web乱码问题_Java Web中文乱码问题解决

一、为什么会出现中文乱码问题:java内核和class文件是基于unicode码的,这使Java程序具有良好的跨平台性,但也导致在Java和JSP文件在编译时以及Java程序与其他媒介交互时等情况下产生中文乱码成为可能。编码方式的不一致,是造成中文乱码的根本原因。二、解决方法(简单粗暴):第一步:增加一个过滤器public class EncodingFilter implements Filte...

weixin_36485298的博客 5480

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java读取properties文件——中文乱码问题

初用properties,读取java properties文件的时候如果value是中文,会出现读取乱码的问题。给定country.properties文件如下: China=中国 USA=美国 Japan=日本 Properties properties = new Properties();   InputStream inputStream = this.getClass().ge...

午夜阳光 1万+

java压缩zip文件中文乱码问题

用java来打包文件生成压缩文件,有两个地方会出现乱码 1、内容的中文乱码问题,这个问题网上很多人给出了解决方法,两种:修改sun的源码;使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以下载使用即可,毫无疑问,选择后者更方便 2、压缩文件注释的中文乱码问题:zo...

化繁为简:为先,为专,为强 4210

java model 中文乱码_中文乱码问题的一些总结

1.在程序开发中,我们常遇到中文乱码的问题:eg.从页面传来的中文,到后台乱码了。怎么办那么在接受页面传值的前面要加上这么一句代码:request.setCharacterEncoding("UTF-8");如果还是不行:那么我们就需要转码了,eg.=request.setCharacterEncoding("UTF-8");String name = request.getParameter("...

weixin_30558657的博客 462

Java WEB中文乱码问题

(一直会分不清楚的字符编码问题,遇到下面这篇文章终于解决了。细细读之,)

Yoummy 1011

java windows 中文乱码问题_JAVA中文乱码之解决方案

1.解决HTML页面的中文问题:为了使HTML页面很好的支持中文,在每个HTML页面的标签内部增加(创建HTML页面自带)Insert title here2.解决jsp页面中的中文问题:pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码(创建jsp自带)3.解决页面数据传输的中文问题:最佳方法是web.xml采用编码过滤器来解决...

weixin_42531923的博客 2933

[问题已处理]-服务器支持中文但是java日志输出中文乱码

导语:服务器支持中文但是java日志输出中文乱码。最后解决的办法。 app04上中文正常 app03上中文乱码 为??? 检查了2台服务器的lang参数 系统版本 jar包启动方式都是一样 但是就是有问题 # 测试服务器是不是中文乱码 echo "哈哈" > 哈哈;cat 哈哈 # 或者date输出看一下是否乱码 如果你设置的是中文的话会显示如下 # 2020年 12月 01日 星期二 13:49:47 CST 发现服务器上输出中文没问题 那就是jar包的问题 # 使用UTF-8 另一台

爷来辣的博客 1677

java url 中文乱码问题_处理URL传递中文乱码问题

作者:肖文伟在网上搜了很多资料都没有搞定,一般都有以下几种说法:方法1:在后台中先获得字符串的iso-8859-1编码形式数组,再使用此数组实例一个UTF-8编码形式String类型字符串.页面提交的url为:leavesp?work=部门主管审批后台处理:String inStr=request.getParameter("work ");String outStr = new String(i...

weixin_42360972的博客 2271

JAVA---处理中文乱码问题

至此POST请求中文乱码的问题就已经解决,但是这种方案不适用于GET请求,这个原因是什么呢,咱们下面再分析。所以GET请求不能用设置编码的方式来解决中文乱码问题,那问题又来了,如何解决GET请求的中文乱码呢?本身是不支持中文展示的,所以改了标签的charset属性后,会导致页面上的中文内容都无法正常展示。到这,我们就可以分析出GET请求中文参数出现乱码的原因了,在进行编码和解码的时候,不管使用的是哪个字符集,他们对应的。,在转换的过程中是它们的编码一致,就可以解决中文乱码问题。

Frank---7的博客 1038

java写入文件中文乱码问题_解决 JAVA 写入文本文件时中文乱码

之前写过一个方法可以解决从外部读入文本时中文不会乱码,可是从程序中的字符串要写回文本文件时又出现了中文字符乱码,原因是JAVA默认使用Unicode编码的字符,而我们使用的windows系统文本文件使用的是GBK编码,要解决这个问题,就得从编码上入手。下面这个方法就可以将字符串以GBK编码写入文本文件,这样就可以解决写入中文字符乱码的问题了。/*** @(#)WriteText.java 17:...

weixin_39820226的博客 2925

c与java的中文乱码_Java 中文乱码问题总结

由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题。于是我给出此篇文章,内容包括对控制台运行的class、Servelets、JSP及EJB类中的中文问题我剖析和建议解决办法。希望大家指教。Abstract:本文深入分析了Java程序设计中Java编译器对...

weixin_31499719的博客 435
上一篇: 胆识也是一种能力[转 一个女程序员的创业人生]
下一篇: java 读取文本文件的乱码问题???
JavaAlpha
博客等级 码龄18年 910粉丝 511原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值