中文乱码问题02

Linux Mint 19.02升级19.03后grub中文乱码 问题分析 这个问题呢,也不复杂,我们可以想一想,出现乱码一般都是字体问题,也就是找不到文字对应的字体,所以才导致无法显示文字而乱码。 可能的原因 字体文件不存在(找不到字体文件当然显示不了) 配置了错误的字体(错误的字体文件里没有中文的字体) 解决过程 既然是GRUB启动项里乱码,我们得查找GRUB相关的文档,最初看了这篇文章:linux Grub中文出现乱码的原因和解决办法,然后试了下,$L... 阅读详情

一、了解常识:

 

1.UTF-8国际编码,GBK中文编码。GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立;

2、web tomcat:默认是ISO8859-1,不支持中文的

3.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码;

4.getBytes() 是通过平台默认字符集进行编码;

 

 

二、引入

 

在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置;而在Servlet中,也会遇到中文乱码问题;

比如:

OutputStream out = response.getOutputStream();

out.write(String );

输出中文时可能会出现乱码;

比如:

 

[java] view plain copy

  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {      
  2.         
  3.     OutputStream out = response.getOutputStream();      
  4.     String data = "博客";      
  5.     out.write(data.getBytes("UTF-8"));  

 

 

输出乱码的问题是程序用UTF-8编码,而浏览器默认用GBK解码了,因此会出现乱码;

 

三、Servlet相关的几种乱码

1、浏览器调用jsp,html等页面中文显示乱码

此情况需满足两个要求:

 

(1)文件本身是以utf-8编辑保存的(myEclipse中在properties中鼠标右键选择utf-8)

(2)浏览器用utf-8解析:

(手动)==> 在浏览器中右键选择编码格式为utf-8

(智能)==> 在文件中写入如: <meta name="content-type" content="text/html; charset=UTF-8">  通过<meta>标签模拟response头,起到告诉浏览器用utf-8的编码解析

(智能)==> response.setContentType("text/html;charset=UTF-8");起到告诉浏览器用utf-8的编码解析

常用:

<meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8">

<%@ pageEncoding="utf-8"%>

<?xml encoding="UTF-8"?>

 

2、通过浏览器调用servlet,页面显示乱码。

Servlet乱码分为request乱码和response乱码;

(1)response乱码问题

解决方法:

 

在网上很有效的解决方法是添加:

response.setCharacterEncoding("UTF-8");

解决不了,后来又搜到一条解决方法是:

response.setContentType("text/html;charset=utf-8");或者 response.setHeader("content-type","text/html;charset=UTF-8");告诉浏览器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在拦截器Filter中设置字符编码,则无此方法,因为Filter的doFilter方法的参数类型是ServletResponse)

两句都填上,后来终于解决了这个问题;

其实我们应该思考一下本质:

 

response.setContentType("text/html;charset=UTF-8"); 目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;

response.setCharacterEncoding("UTF-8");目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器;

 

==> 情况一:

问题代码如【引入】的例子

 

我们这里先来说明一下错误的原因,下图是显示乱码的流程图:

 

解决方案流程图:

==>情况二:

问题代码如下

 

[java] view plain copy

  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    
  2.         PrintWriter out = response.getWriter();    
  3.         String data = "博客";    
  4.         out.println(data);      
  5.     }  

 

 

浏览器输出的结果为: ??

原因:"博客"首先被封装在response对象中,因为IE和WEB服务器之间不能传输文本,然后就通过ISO-8859-1进行编码,但是ISO-8859-1中没有“博客”的编码,因此输出“??”表示没有编码; 

错误代码流程图:

而解决方案是:response.setCharacterEncoding("GB2312"); 设置response使用的码表 

解决方案流程图:

 

(2)request乱码问题

request请求分为post和get,对于不同的请求方式有不同的解决乱码的方案;

==>POST请求:

错误原因:

 

解决方案:

==>GET请求(URI方式传递参数乱码):

出现情况:浏览器访问<a href=""><form method="get">

如:<a href="/webproject/display.jsp?username=张三&password=123">显示用户名和密码</a>

解决方法:问题本质是get方式传递的参数内容默认编码方式问ISO8859-1,而且使用request.setCharacterEncoding("utf-8")也无法解决问题。

法一:要解决这个问题,修改tomcat服务器的配置文件。修改tomcat目录下的conf/server.xml文件的第43行:

修改前内容:

<Connector port="8080" protocol="HTTP/1.1"

     maxThreads="150"   connectionTimeout="200000"

     redirecPort="8443"/>

修改后内容:

 

<Connector port="8080" protocol="HTTP/1.1"

     maxThreads="150"   connectionTimeout="200000"

     redirecPort="8443"    URIEncoding="utf-8"/>

法二:String usernameString = new String(username.getBytes("ISO-8859-1"),"UTF-8"); (如下图)
法三:URL转换 

 

3、调用数据库出现乱码

安装数据的时候选择UTF-8

 

四、JSP相关乱码解决方案(部分已经在上面介绍了)

问题描述:通过jsp,html,或servlet中的表单元素把参数提交给对应的jsp或者servlet时,在接收的jsp或servlet中接收到的参数中文显示乱码。

例如:

提交jsp代码如下:

<%@ page language="java" pageEncoding="utf-8"%>

<html>

<head>

<title>输入表单</title>

</head>

<body>

<form id="inputForm" name="inputForm" method="post" action="display.jsp">

      用户名:<input type="text" name="username"/><br/>

      密   码  :<input type="password" name="password"/><br/>

     <input type="submit" name="submit" value="提交"/>

</form>

</body>

</html>

 

接收参数的jsp代码如下:

<% @  page language="java" pageEncoding="utf-8"%>

<html>

<head>

<tilte>接收表单</title>

</head>

<body>

     <% 在这里插入

           request.setCharacterEncoding("utf-8");

      %>

       用户名:<%=request.getParameter("username")%><br/>

      密     码:<%=request.getParameter("password")%><br/>

</body>

</html>

解决方法:在接收post提交的参数前,使用request.setCharacterEncoding("utf-8")设定接收参数的内容格式为utf-8编码。见接收表单中的插入内容即可。当然这种乱码问题最好使用中文过滤器的方法最好。

 

 

五、properties文件乱码

 

 

问题描述:在使用一些类库或者框架时,为了实现页面内容国际化,需要编写对应的properties文件。而properties文件中的中文内容在显示的时候也会出现乱码。

解决方法:这个乱码问题可以通过jdk中的native2ascii工具解决。使用如下命令:

native2ascii   -encoding   utf-8  display.properties    display_zh_CN.properties

出现乱码问题的原因是因为java编译器只能处理Latin-1或unicode编码的字符文件。

遇到jsp中文显示乱码的解决方案 前言 正文 总结 阅读详情

相关推荐

乱码解决 乱码解决 乱码解决 乱码解决 乱码解决

乱码解决 乱码解决 乱码解决 乱码解决 乱码解决 乱码解决 乱码解决

Java Web项目中解决中文乱码方法总结

一、了解常识: 1.UTF-8国际编码,GBK中文编码。GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2、web tomcat:默认是ISO8859-1,不支持中文的 3.java.nio.charset.Charset.defaultCharset()获得平台默认字符编码; 4.getBytes() 是通过平台默认字符集进行...

weixin_34355881的博客 2714

手把手教你用Python实现最简单的语义通信(Sem Comm)Demo

本文通过Python和PyTorch,手把手教你构建一个基于深度学习的语义通信(Semantic Communication)Demo。该Demo使用自编码器架构,从MNIST图像中提取低维语义特征进行传输与重建,实现了从“传输比特”到“传递含义”的跨越,并探讨了其效率优势与鲁棒性。

weixin_29080843的博客 246

中文乱码(二)

   中文乱码是是个头疼的问题。遇到多次乱码后,有两点总结。         如果是直接利用form表单提交数据到服务器,那么要注意页面的编码pageEncoding,在读取的时候:         假如编码为pageEncoding="GBK",用         new String("提交的中文字符串".getBytes("GBK"),"ISO-8859-1")         假如编码为p

1万+

算法-基于MACD的Adaboost股价涨跌预测模型

MACD是一个指标,具体用法是MACD>0看涨,反之看跌,果真是这样的吗?由于所有的技术指标都基于对历史数据的统计,指标的滞后性也就难免,有时候MACD明明大于0,股价仍然跌,有时候macd小于0,股价仍然涨。 本文基于Adaboost算法提出了一种基于macd的线性阀值分类器作为若分类器,通过在限定的解空间内寻找使得错误率最小的阀值和偏置,这样做避免了训练若分类器的复杂性,经验证,这种方法有效。

mtaxot的博客 8023

从频谱分析到硬件加速:用ZYNQ-7020+FFT IP核实现实时信号处理的完整方案

本文详细介绍了如何利用ZYNQ-7020和FFT IP核实现实时信号处理的完整方案,涵盖系统架构设计、硬件加速实现及性能优化。通过异构计算架构,该方案将1024点FFT处理延迟压缩至28μs,显著提升工业自动化和无线通信等领域的实时频谱分析效率。

weixin_33704234的博客 467

mysql怎么解决乱马1 2_MySQL中文乱码问题的解决第2/2页

MySQL中文乱码问题的解决第2/2页更新时间:2006年12月11日 00:00:00 作者:1. MySQL 4.1 在文字上有很大改进,它有了 Character Set 与 Collation 的慨念。2. 在 MySQL 4.0 ,一般的程式都会将文字以拉丁文 ( latin) 来储存,就算我们输入中文字,结果仍是放在以拉丁文设置的文字栏里头,这对 MySQL 4.0 与以 MySQ...

weixin_42401025的博客 5707

【网络与爬虫 53】Scrapy-Prometheus实战指南:打造企业级爬虫监控体系的终极解决方案

本文深入探讨Scrapy-Prometheus集成技术,通过费曼学习法从监控痛点出发,详细讲解如何在Scrapy爬虫中集成Prometheus指标收集系统。涵盖从基础配置到企业级监控体系的完整实战指南,帮助开发者构建可观测性强、可维护性高的分布式爬虫监控平台,实现爬虫性能的精准监控和智能告警。

熵数实验室 1584

02-spring mvc 中文乱码问题

一 问题 利用springmvc 做了一个文件上传的demo,发现通过浏览器请求服务器进行文件上传时,提交的中文,到了服务器后台变成了乱码。其中已经在Controller层已经对请求头设置了编码字符集为utf-8 request.setCharacterEncoding("UTF-8")但仍然还是乱码 public class UploadController { @RequestMapping("/upload") public void download(MultipartFile

SO 209

Codex 100个真实案例 - 用AI画业务流程图Mermaid(产品经理都馋哭了)

还在用 Visio、ProcessOn 拖拖拽拽画流程图?改一个箭头方向就要调半天?本案例教你用 Codex 自然语言描述业务流程,AI 自动转为 Mermaid 代码,一秒生成专业流程图、时序图、甘特图、饼图!还能搭建在线渲染工具、批量导出 PNG/SVG、集成到文档系统。产品经理、架构师、项目经理都能用,从此画图再也不是体力活!

yueyeguzhuo的专栏 347

18、未来医疗信息学中的太赫兹天线技术

本文探讨了太赫兹天线技术在医疗信息学中的关键作用,重点分析了分裂环谐振器和纳米结构光导天线(PCA)的设计与性能提升方法,介绍了相干与非相干太赫兹检测技术,并通过等效电路模型和数值模拟深入解析PCA工作机理。文章还展示了太赫兹技术在无创血糖监测、肿瘤检测等医疗诊断中的实验应用,总结了其非侵入性、高分辨率成像和多参数分析等优势,同时指出信号检测难、成本高和技术复杂等挑战。未来趋势包括设备小型化、效率提升及与人工智能融合,拓展至药物研发、皮肤与神经疾病诊断等领域,展现出变革医疗健康的巨大潜力。

milk8的博客 146

02. Python 中文乱码问题处理以及常用的编码

中文乱码问题处理以及常用的编码

俗人世界 602

NX二次开发 计算多个体的最小包围盒

多个体的最小包围盒

weixin_72680115的博客 430

day02_处理中文乱码问题

ndk开发的中文乱码问题: 1.低版本ndk 不支持中文 ndk-r4-crystal iso-8859-1 转码new String("要".getBytes("iso-8859-2")) 2、直接把.c文件用成utf-8的编码格式的就可以了

503

Yolov8-pose关键点检测:训练准备篇 | 自己数据集从labelme标注到生成yolo格式的关键点数据

yolov8-pose关键点检测系列:从数据集标记到生成适合yolo的关键点格式

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 5875

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

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

java10.02编不了中文,struts处理中文乱码问题总结

㈠页面显示中文乱码㈡传递参数中文乱码㈢国际化资源文件乱码下面就这三中情况介绍怎么在具体项目中处理这些乱码问题。而对于整体的处理思想,是要统一编码为: UTF-8.(以myeclipse6支持的struts1.3为准)㈠页面显示中文乱码对于在页面中显示出现乱码,这个问题比较简单,便是检查你的JSP文件里是不是出现了中文要处理,因为JSP默认的编码格式为“ISO-8859-1”,当JSP中出现要处理的...

weixin_30320771的博客 159

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【2014-02-11】cocos2dx的中文乱码问题

解决在 Visual Studio 2012 中开发 Cocos2d-x 程序时出现中文乱码问题的方法。通过将源文件编码改为"UTF-8 无签名"格式,同时将换行符统一为 Unix 风格即可解决。

cstriker1407的专栏 158

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

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

02-zabbix图形中文字乱码问题

解决字体乱码问题: 在Windows-控制面板-字体中选择自己喜欢的字体下载下来,并上传到zabbix服务器中 注意:把新字体文件改名成原来字体文件的名字,不然需要修改如下配置文件 复制到桌面。上传到zabbix-server监控端 如果有字体文件: cp 字体文件 /usr/share/zabbix/fonts/graphfont.ttf 先将字体文件上传到zabbix服务器中 [root@zabbix-server ~]# cd /usr/share/zabbix/fonts/ [root@zab.

weixin_45110196的博客 320

VMware中安装的Red Hat Enterprise Linux 5中文乱码

问题描述: 在Linux桌面环境中,中文显示就像麻将一样成块状的如下图: 问题所在:没有安装中文字体包 fonts-chinese-3.02-12-el5.noarch.rpm 安装字体后: 问题的解决方法: 安装:fonts-chinese-3.02-12-el5.noarch.rpm包 安装命令: 1、打开终端进入ro

3416

解决Ubuntu 14下,PhpStorm 9.x 编辑器界面中文乱码的问题

在Ubuntu 14中,安装了 PhpStorm 9.02,发现 软件界面中文乱码,但是源码编辑处却显示正常,如下图所示: 很奇怪,猜想,应该是软件界面字体有问题,选了一个没有包含中文字体的字体。先前,在 Windows 7 下,软件界面字体我一般用“微软雅黑”,但是在Ubuntu下,默认是没有被安装的,所以,要解决此问题,按如下操作即可: 第一步:安装中文字体 Ubun...

weixin_30904593的博客 135

大型语言模型子代理架构解析与API实践指南

大型语言模型(LLM)作为人工智能的核心技术,基于Transformer架构实现强大的自然语言处理能力。其技术原理涉及自注意力机制和深度神经网络,通过预训练和微调获得通用语言理解能力。在工程实践中,子代理架构通过专业化分工提升任务处理效率,而黑盒特性则促使开发者关注模型可解释性技术。这些技术广泛应用于智能对话系统、代码生成、内容创作等场景,特别是在ChatGPT等先进模型中,子代理协作和API集成成为提升应用性能的关键要素。

weixin_33841722的博客 369

centos firefox中文乱码问题

centos firefox中文乱码问题 下载两个rpm包 fonts-chinese-3.02-9.6.e15.noarch.rpm fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm 然后安装rmp rpm -zxf "xxx.rpm" 或yum install xxx.rpm ...

weixin_34254823的博客 88

乱码问题总结:常见的中文乱码问题

问题使用cmd命令窗口,运行java命令时候出现中文乱码解决桌面上我的电脑图标—》右击选择属性—》高级系统设置—》高级—》环境变量—》系统变量栏点击新建:框中分别输入如下值打开cmd命令行,运行javac命令,此时不再乱码,成功解决。

baomingshu的博客 6237

解决中文乱码问题

解决中文乱码--面试题常见乱码问题分析 常见乱码问题分析 1、中文变成看不懂的字符 如果一串中文字符变成了一串看不懂的字符如:“Ì Ô £ ¡Î Ò Ï²»¶ £ ¡”,这种情况通常是编码字符集与解码时所用的字符集不一致所造成的。比如使用GBK编码,如果使用ISO-8859-1解码的话结果就是这样。 2、一个汉字变成了一个问号 如果编码和解码的字符集都是一致的,那么可以确定该字符编码不支持中文,例如:ISO-8859-1     3、一个汉字变成了两个问号 中文经过多次编码且其中有一次编码或者解码使用了

微生肠时的博客 23万+

socket中文乱码问题

问题描述: 后端向前端发送中文,前端显示正常 前端向后端发送中文,后端显示乱码 解决: 前端js引入 最新版的 socket.io.js,不能使用socket.io.min.js <script src="{{url_for('static',filename='js/socket.io.dev.js')}}"></script> ...

syousetu的博客 1万+
上一篇: 中文乱码01
下一篇: 2015年数学建模-A影子定位
jy0921_
博客等级 码龄11年 329粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值