Java中常出现的乱码问题总结

Podman修改镜像源教程(附最新docker镜像源) 阅读详情

转载请注明,大飞_Rflyee:http://blog.youkuaiyun.com/rflyee/article/details/13274907


       编码也就是计算机能识别的数据与人类友好的数据的翻译过程。计算机的基本存储单位是byte,人类友好语言(汉语英语等各种语言)用char存储吧。那么编码其实就可以理解为char-byte、byte-char这样的过程。这样char-byte之间的翻译就需要一个标准了,可惜的是每个国家根据自己国家的母语设计出了不同的翻译标准,这边导致不同标准之间的翻译过程出现不统一,自然乱码问题就出现了。

        常见的编码标准有很多,常用的能用识别中文的有GB2312、GBK、UTF-8、UTF-16。其中,GB2312与GBK类似,但是GBK范围更大,所以GB2312、GBK之间应该选用GBK;UTF-16每个字符都用2个字节编码,对于ASCII字符浪费空间,另外如果编码过程中有一个字节损坏则会影响后边的所有,但是编码效率相对高;UTF-8最大的特点是变长编码,1-4个字节来表示一个符号,节省空间,并且解决了UTF-16的安全问题。因此,utf-8适合网络传输(安全),utf-16适合本地磁盘和内存之间。

Java Web中常见的乱码:

1、servlet中获取请求参数乱码
(1)get方式:

jsp提交到servlet中,servlet中获取

String getStr = request.getParameter("username");

解决1:(实验不可行)配置Connector,

<Connector URIEncoding="UTF-8" useBodyEncodingForURI="true" />

解决2:手动解码
String Str = request.getParameter("username");
String Str2 = new String(getStr.getBytes("iso8859-1"),"utf-8");
syso(Str2);//此时的字符串才是不乱码的。
(2)post方式
解决:
request.setCharacterEncoding("utf-8");//这个只对http中请求实体有效,请求头,请求行无效。这也是get方式不能使用次方法解码的原因。
String postStr = request.getParameter("username");
System.out.println("postStr:"+postStr);

2、servlet中有输出中文到浏览器
response.setCharacterEncoding("utf-8");		//设置服务器内将字符转换为字节时的编码集,必须在getWriter()之前调用
response.setContentType("text/html;chatset=utf-8");//此句话隐含已经将上一句实现,因此上一句可以省略。
response.getWriter().write("中国");

3、请求头中(设置请求头实现文件下载时)
请求头中信息必须以ASCII编码,如果有非ASCII,必须手动转换。
转换方法:URLEncoding.encode("中国","utf-8");
response.setHeader("Content-Disposition","attachment;filename="+URLEncoding.encode("美女","utf-8")+".jpg");
4、jsp页面中的乱码:
输出响应正文时出现的中文乱码问题 
<%@ page pageEncoding="UTF-8"%>足矣
(1)JSP引擎将JSP页面翻译成Servlet源文件时可能导致中文乱码问题 

JSP引擎将JSP源文件翻译成的Servlet源文件默认采用UTF-8编码,而JSP开发人员可以采用各种字符集编码来编写JSP源文件(默认iso8859-1),因此,JSP引擎将JSP源文件翻译成Servlet源文件时,需要进行字符编码转换。 

(2)在翻译过来的servlet向浏览器发送数据时也可能乱码。发送时的编码和浏览器打开时的编码不一致。如以上2

解决:在myeclipse等IDE中只需在jsp页面声明<%@ page pageEncoding="UTF-8"%>即可智能为整个过程统一编码。

5、xml乱码
将节点写出到XML文件中去
(1)方法1:
调用Node提供的write(Writer writer) 方法,使用默认方式将节点输出到流中:
node.write(new FileWriter("book.xml"));
乱码问题:
Dom4j在将文档载入内存时使用的是文档声明中encoding属性声明的编码集进行编码, 如果在此时使用writer输出时writer使用的内部编码集与encoding不同则会有乱码问题。
FileWriter默认使用操作系统本地码表即gb2312编码,并且无法更改。
此时可以使用OutputStreamWriter(FileOutputStream("filePath"),"utf-8");的方式自己封装 一个指定码表的Writer使用,从而解决乱码问题。
(2)方式2:
利用XMLWriter写出Node:
 XMLWriter writer = new XMLWriter(new  FileWriter("output.xml"));
 writer.write(node);
writer.close();
乱码问题:
a、使用这种方式输出时,XMLWriter首先会将内存中的docuemnt翻译成UTF-8格式的document,在进行输出,这时有可能出现乱码问题。可以使用OutputFormat 指定XMLWriter转换的编码为其他编码。
OutputFormat format = OutputFormat.createPrettyPrint();             
format.setEncoding("GBK");       
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);

b、Writer使用的编码集与文档载入内存时使用的编码集不同导致乱码,使用字节流或自己封装指定编码的字符流即可(参照方法1)。


延伸阅读:http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/index.html


转载请注明,大飞_Rflyee:http://blog.youkuaiyun.com/rflyee/article/details/13274907

基于Simulink的转向控制系统仿真建模示例 本文完成了基于 Simulink 的 EPS 转向控制系统仿真,实现了:✅掌握 EPS 助力控制基本原理✅构建车速敏感的可变助力策略✅在 Simulink 中验证低速轻便、高速沉稳的手感✅达成“安全、舒适、高效”的现代转向系统。 阅读详情

相关推荐

运行stable-diffusion出现的问题

解决:即用 https://github.com/CompVis/taming-transformers/blob/master/taming/modules/vqvae/quantize.py 新文件,替换错误提示文件中的全部内容即可。5.新建文件夹 CompVis/stable-diffusion-safety-checker/将下载的四个文件放入 解决!后面还会遇到'openai/clip-vit-large-patch14离线下载的问题,同样步骤解决。解决:下载后离线,步骤如下。

weixin_52121118的博客 2348

java String输出GB2312编码格式到文件

【代码】java String输出GB2312编码格式到文件。

Start_From_Scratch的博客 1034

从原理到调试:手把手教你用Matlab解码互补格雷码与相移码(附数据与常见错误排查)

本文详细介绍了如何使用Matlab解码互补格雷码与相移码,涵盖从原理到调试的全过程。通过实际案例和代码示例,帮助读者掌握结构光三维重建中的相位解包裹技术,并提供了常见错误排查与优化建议,提升解码效率与准确性。

weixin_29090917的博客 220

转换流读写文件中的数据

import java.io.*; /* InputStreamReader:是从字节流到字符流的桥梁 它读取字节,并使用指定的编码将其解码为字符 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集 OutputStreamWriter:是从字符流到字节流的桥梁 是从字符流到字节流的桥梁,使用指定的编码将...

望江盼船的博客 361

以太网MII、RMII、GMII、RGMII(三)

RMII接口收发的数据位宽为2bit,因此管脚数目大为减少,在高密端口PHY中应用较多,但是由于其是MAC和PHY共用一个参考时钟,接口之间的距离不能太远;一般的GMII接口都有两个发送参考时钟:TX_CLK和GTX_CLK,两者的方向是不一样的,前者有PHY提供(同MII),后者由MAC或外部参考时钟源提供,绝大多数GMII接口都是兼容MII接口的,在用作MII模式时,使用TX_CLK和8根数据线中的4根。MII接口中的接收时钟和发送时钟是分开的,而且都是由PHY芯片提供给MAC芯片的。

qq_42357877的博客 2333

OutputStreamWriter bufferedWriter file 写文件 解决字符格式问题 UTF-8 GBK

OutputStreamWriter ow=new  OutputStreamWriter(new FileOutputStream(filePateh),"GBK"); bufferedWriter bw= new bufferedWriter (ow); if(data !=null && !"".equals(date)){  String [] str=data.split(

JesseCary的博客 3517

一篇文章带你认识 SpringBoot

文章目录一、原有 Spring 优缺点分析二、SpringBoot 的概述 一、原有 Spring 优缺点分析 (1)Spring 的优点分析 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的 Java 对象(Plain Old Java Object,POJO)实现了EJB的功能。

南淮北安的博客 766

BufferedWriter.write()写中文乱码的解决办法

在用BufferedReader和BufferedWriter读写文件的过程中,发现写的文件中如果含有中文字符会有乱码的情况。 假设想把http://www.baidu.com百度首页的内容替换为自己想自定义的内容,代码如下: /** * 通过网页URL获取源码 * @param getUrl */ public st...

菜菜的博客 2万+

第17章 后端开发最佳实践 —— OpenSpec + 智能体的工程化实战

后端开发有大量重复性的"样板代码"工作。我们可以创建自定义 Skill,让 AI 自动生成标准的三层架构代码。创建 Skill:后端 CRUD 生成器以 CodeBuddy 为例,在创建:其他工具用户请参考各自文档,了解如何创建自定义 Skills 或类似机制。skill.md## 描述根据实体定义自动生成标准的三层架构代码(Controller-Service-Repository)## 适用场景- 快速创建实体的 CRUD 接口- 保持代码结构一致性- 减少重复性编码工作## 使用方法。

快乐的修补匠的专栏 322

概念解析 | 事件相机的原理 (含仿真代码)

在我们熟悉的世界里,传统相机就像一个勤勉的绘画师,每隔固定的时间就为我们勾勒出一幅完整的画面。但是,大自然中有太多瞬息万变的精彩场景,这种"定时绘画"的方式往往难以捕捉。于是,一种全新的"观察者"应运而生 -事件相机(Event Camera)。事件相机,就像是一群极其敏感的"像素哨兵",它们不再按部就班地等待指令,而是主动感知周围的变化,只有在光线强度发生显著变化时才会发出信号。这种革命性的设计,让事件相机拥有了传统相机难以企及的优势:超高的时间分辨率、极低的延迟、宽广的动态范围,以及出色的能效比。

NLOS的博客 1423

JAVA 中的文件IO使用outputstreamwriter writer 出现乱码的问题。

当想把项目中的某些内容写到本地文件中时,需要用到outputstreamwriter来进行写入操作时,发现使用 writer.write(),会出现乱码。原因是因为虽然他说使用int类型变量,但实际上是以字符串的形式进行输出的,所以如果传参的时候传int类型,打印的时候会是乱码,可以在打印的时候加一下打印语句来改变他的类型。 例如: writer.write("你要写的话"+int); 这样的话传过去默认就是字符串类型。不需要使用 tostring 来转。 ...

m0_46900552的博客 6878

手把手实现3D肺结节检测:基于Faster R-CNN的从CT处理、训练到部署的五步代码级实战与避坑指南

亲爱的同学,当你能完整实现“3D Faster R-CNN肺部结节检测系统”,你会发现医学影像AI的毕设课题充满挑战与成就感。我们围绕3D Faster R-CNN模型,从数据处理、模型搭建到实验验证,一步步带你打造一个能精准检测肺部结节的智能系统,让你的毕设既体现技术深度,又能为肺部疾病早期诊断贡献实用价值。是专为3D医学影像设计的目标检测模型,能在三维CT数据中自动定位、识别肺部结节——这一课题兼具“临床价值”和“技术挑战性”,是毕设的优质选择,能充分展现你的工程能力和科研敏感度。

LXY_LOVE36的博客 308

java中的乱码问题

​ 1. 设置的字符集要使用一个支持中文的字符集​​ 2. 设置字符集 配置UTF-8当前视图文件的字符集通过来告知浏览器通过什么字符集来解析当前文件</</</</​。

SuoGG的博客 464

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

如何解决java乱码问题吗_java乱码问题处理

java乱码问题处理java乱码出现的问题有很多,这里主要解释tomcat,jsp,html,http(get,post请求乱码处理)。常见的问题可能是tomcat,http请求乱码问题,对于jsp,html是很小儿科的,希望对需要的人有用。1、关于配置Tomcat的URIEncoding问题:程序需要发送http GET请求到服务器,请求的参数中包含了中文字符。程序中参数为UTF-8格式,且经过...

weixin_33281416的博客 139

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java在cmd中乱码的问题解决

本文深入探讨了在使用Java命令行(cmd)时可能出现的中文乱码问题,并提供了两种解决方案。首先,通过临时的方式,用户可以执行命令chcp 936选择字符集,然后再运行Java命令,确保在选择字符集过的cmd窗口中可以正常显示中文字符。其次,为了解决问题的根本,文章介绍了永久性的解决方案,通过新建环境变量JAVA_TOOL_OPTIONS,在cmd中确保中文正常显示。这两种方法有效解决了Java在cmd中可能遇到的中文乱码问题,提供了灵活的解决途径供读者选择。

踏雨歌青春,诗酒趁年华 6404

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

skybot的专栏 5679

解决JAVA的乱码问题

解决JAVA编程过程中的乱码问题 一、乱码是如何产生的? 本质上都是由于字符串原本的编码格式与读取时解析用的编码格式不一致导致的。乱码指的是程序显示出来的字符文本无法用任何语言去解读。一般情况下会包含大量的?。乱码问题是所有计算机用户或多或少会遇到的问题。造成乱码的原因就是因为使用了错误的字符编码去解码字节流,因此当我们在思考任何跟文本显示有关的问题时,请时刻保持清醒:当前使用的字符编码是什么。只...

weixin_43744532的博客 214

传智播客Java web之 乱码问题

     不管是在写Servlet还是JSP应用程序,只要不是西欧ISO8859-1字符集编码,都将会遇到乱码问题。每当遇到乱码问题,如果不懂这些字符集的转换原理,调试起来是相当的困难。在JAVA WEB系列视频中,有几个章节都讲述了字符集的问题以及在实践中应该怎么解决乱码问题。    首先一个遇到乱码的问题就是请求参数。常遇到的当然是中文字符的乱码问题。请求参数是被浏览器经过URL编码才发送给服

JAVA专栏 608

Java乱码问题(乱码是如何产生的,怎么解决)

Java乱码问题(如何产生,怎么解决)背景思考乱码产生的原理例子解决方案Step1: 文件编码设置Step2: 编译器编码设置Step3: JVM读取class文件的编码配置结束语 背景 最近因公司项目需要,使用javaFx开发了一个桌面客户端。因为客户群都是windows桌面,所以我采用了maven的javapackager插件将其打包成exe安装文件。 然后,就遇到了中文乱码问题,下意识的百度了一下,看到几种方法,总结下来有以下几种: idea的encoding配置(有说是全部改成utf8的成功的..

大胡子老哥的博客 4366

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

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

weixin_36485298的博客 5480

java中乱码问题

java中乱码问题

u013714419的专栏 829

java乱码问题分析

java乱码问题问题描述原因分析:解决方案:要求实例补充:常见的两种字符集及其代码:Windows系统下查看默认字符集Windows系统切换命令行字符集 问题描述 两种情况: 使用javac命令编译的时候报错,例如: 编译的时候没报错,但在使用java命令运行class文件时出现乱码,例如: 原因分析: 一个Java源代码到输出的过程如下所示: 在解码、编码和显示的时候都会使用到字符集。 通常,在使用javac命令不加任何选项时,javac命令会使用当前系统默认的字符集将.java源文

xswl5148的博客 9127

java在cmd中乱码问题解决

乱码问题解决 安装完毕后,发现输入命令会有乱码,可能有电脑编码问题有关,之前flask运行不起来,更改了电脑的编码 解决方法: 设置一个系统环境变量 JAVA_TOOL_OPTIONS -Dfile.encoding=UTF-8 退出cmd,重新进入 问题解决 ...

Love&Share 1万+

java DES加密解密的乱码问题

这里写自定义目录标题解决java DES加密过程中遇到的乱码问题 解决java DES加密过程中遇到的乱码问题 package com.example.demo; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.c

李金鹏 3007

java exception 乱码_java如何解决乱码问题

java如何解决乱码问题做项目经常会遇到Java中的乱码问题,那么遇到乱码问题怎么解决呢?下面小编为大家解答一下,希望能帮到大家!分析编码与解码编码就是将字符转为字节,解码就是就是将字节转换为字符。字节流与字符流对文件的读写操作都是通过字节流来实现的,即使JAVA中有字符流,但是其底层仍然使用的字节流。乱码问题出现java中使用最频繁的是字符,当我们将文件读入内存并在控制台显示时(字节流---&g...

weixin_30975237的博客 301
上一篇: Java关键字this的用法总结
下一篇: 应用程序基础之01序论
Rflyee
博客等级 码龄14年 56粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值