搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
不正经
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
《深度学习在图像分割中的应用--基于深度学习的甲状腺结节超声图像分割》论文笔记_超声图像论文dice
2
数据结构-树和森林之间的转化
3
大数据——Zookeeper ZBA协议(四)
4
flink实战-模拟简易双11实时统计大屏_flink模拟某猫双十一实时统计大屏系统,1.实时计算出当天零点截止到当前时间的销售
5
freertos作业day2
6
【华为OD机考 统一考试机试C卷】螺旋数字矩阵(C语言)
7
Redmi Note 4X adb指令卸载应用_小米adb精简教程
8
程序员如何跟领导提离职_离职理由怎么说?面试时又怎样体面的说辞职理由?(附清单)...
9
Android中自定义弧形的seekbar_android 虚弧线seekbar
10
Android多媒体应用——AudioTrack, AudioRecord_android audiotrack github
当前位置:
article
> 正文
各种中文乱码的解决方法 (转)
作者:不正经 | 2024-04-22 09:58:18
赞
踩
各种中文乱码的解决方法 (转)
一、Java中文问题的由来
Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。
首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上或基本上就能解决这类乱码问题。
本文要重点讨论的是第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,具体情况如下:
从页面form提交数据到java程序 byte->char
从java程序到页面显示 char?>byte
从数据库到java程序 byte?>char
从java程序到数据库 char?>byte
从文件到java程序 byte->char
从java程序到文件 char->byte
从流到java程序 byte->char
从java程序到流 char->byte
如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。
二、解决方法
前面已经提到了Java程序与其他媒介交互时字符和字节的转换过程,如果这些转换过程中容易产生乱码。解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的编码方式保持一致,下面分别论述(Java或JSP自身产生的乱码请参看第一部分)。
1、JSP与页面参数之间的乱码
JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")。
如果在JSP将变量输出到页面时出现了乱码,可以通过设置response.setContentType("text/html;charset=GBK")或response.setContentType("text/html;charset=gb2312")解决。
如果不想在每个文件里都写这样两句话,更简洁的办法是使用Servlet规范中的过虑器指定编码,过滤器的在web.xml中的典型配置和主要代码如下:
web.xml:
CharacterEncodingFilter
net.vschool.web.CharacterEncodingFilter
encodingGBK
CharacterEncodingFilter
/*
CharacterEncodingFilter.java:
public class CharacterEncodingFilter implements Filter
{
protected String encoding = null;
public void init(FilterConfig filterConfig) throws ServletException
{
this.encoding = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset="+encoding);
chain.doFilter(request, response);
}
}
2、Java与数据库之间的乱码
大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql驱动:jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。
3、Java与文件/流之间的乱码
Java读写文件最常用的类是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用FileReader和FileWriter的父类:InputStreamReader/OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。
4、其他
上面提到的方法应该能解决大部分乱码问题,如果在其他地方还出现乱码,可能需要手动修改代码。解决Java乱码问题的关键在于在字节与字符的转换过程中,你必须知道原来字节或转换后的字节的编码方式,转换时采用的编码必须与这个编码方式保持一致。我们以前使用Resin服务器,使用smartUpload组件上传文件,上传文件同时传递的中文参数获取没有乱码问题。当在Linux中把Resin设置成服务后,上传文件同时的中文参数获取出现了乱码。这个问题困扰了我们很久,后来我们分析smartUpload组件的源文件,因为文件上传采用的是字节流的方式,里面包含的参数名称和值也是字节流的方式传递的。smartUpload组件读取字节流后再将参数名称和值从字节流中解析出来,问题就出现在smartUpload将字节流转换成字符串时采用了系统默认的编码,而将Resin设置成服务后,系统默认的编码可能发生了改变,因此出现了乱码。后来,我们更改了smartUpload的源文件,增加了一个属性charset和setCharset(String)方法,将upload()方法中提取参数语句:
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1 );
改成了
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, charset );
终于解决了这个乱码问题。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/不正经/article/detail/468123
推荐阅读
article
10
分钟带你
全面
了解
StarRocks
...
StarRocks
是一款极速全场景 MPP 企业级数据库产品,具备水平在线扩缩容,金融级高可用,兼容 MySQL 5....
赞
踩
article
java
重载
_3.
为什么
Java
不
支持
运算符
重载
?...
另一个类似棘手的
Java
问题。
为什么
C++
支持
运算符
重载
而
Java
不
支持
?有人可能会说+
运算符
在
Java
中已被
重载
用于字...
赞
踩
article
基于
Python
+
Dlib
+
OpenCV
个人
换脸
应用智能
实现
(深度
学习
+
机器
视觉)含全部工程源码及视...
本项目利用
Dlib
提供的
机器
学习
、数值计算、图模型算法和图像处理等功能,基于人脸识别的预训练模型,旨在
实现
照片
换脸
的功能...
赞
踩
article
使用
树莓
派
Pico
、
DHT11
和
SSD1306
搭建
一个
温度
湿度计
(只使用官方库,以及官方案例代码的错...
最近想
树莓
派
Pico
、
DHT11
温湿度传感器和
SSD1306
OLED 屏幕做
一个
温度
湿度计
,
树莓
派官方案例也分别...
赞
踩
article
StarRocks
表
设计_
starrocks
建
表
...
我们先来看一段代码create table if not exists test ( event_time DATETI...
赞
踩
article
NLP
复习
3
,手撕多头
attention
_
手撕
attention
...
【代码】
NLP
复习
3
,手撕多头
attention
。
_
手撕
attention
手撕
attention
...
赞
踩
article
项目经理
必备
的
8
种
能力
,
最后
一个
90%
的
PM都认同!...
一、沟通
的
能力
二、组织会议
的
能力
三、走动式管理
的
能力
定义:走动管理(management by wandering ar...
赞
踩
article
3月面经:真可惜...
拿
了
小米
的
offer
,
字节
却惨挂在三面_
小米
海外
面试
英语...
我是3月份参加
字节
跳动和华为
的
面试
的
,虽然我只
拿
下
了
小米
的
offer
,但是我自己也满足
了
,想把经验分享出来,进而帮助更多...
赞
踩
article
陀螺仪
数据处理
_
陀螺仪
芯片
输出
偏差
大...
陀螺仪
数据处理
笔者近期接到了惯导模块的任务,主要是对需要惯导模块准确
输出
高精度的偏航角。一、简要介绍
陀螺仪
存在的
偏差
一...
赞
踩
article
项目经理
所
应
具备
的
八项
素质
:_
项目经理
基本安全素养
八个
必须
...
具体来说
项目经理
是
应
该 “在工作中学习,在学习中工作”,由培养
项目经理
所
需能力
的
八个
途径总结出作为一名
项目经理
所
应
具备
的
...
赞
踩
article
项目
经理
责任制
核心
要点·构建
项目
经理
的选聘体系_
软件开发
类
项目
的
项目
经理
责任制
核心
是什么...
对于工程建设
项目
而言,
项目
经理
无疑是整个
项目
管理活动中最
核心
岗位。这一点从
项目
经理
在
项目
管理活动中的地位即可体现:
项目
经...
赞
踩
article
项目管理
需要
具备
什么
能力
?_软件
项目管理
拉通
能力
...
作为一名项目经理,必须
具备
多种技能和
能力
,以确保项目能够按时、按质量、按预算完成。以下是
项目管理
需要
具备
的几个关键
能力
:...
赞
踩
article
大
数据
与
人工智能
:
深入探讨
它们
的
关系与应用...
人工智能
的
发展离不开
大
数据
的
支持,
大
数据
为机器学习和深度学习等
人工智能
算法提供了充足
的
训练和优化
数据
。
大
数据
为
人工智能
算...
赞
踩
article
角色
动画
(
Character
Animation
)的现状与趋势_
adversarial
motion
...
个人需求需求:靠游戏手柄(用户)以虚拟人物的根轨迹trajectory来控制用户朝向,同时通过控制输入来合成出人难以做到...
赞
踩
article
微信
小
程序
----简易
table
表格_
微信
小
程序
表格控件...
由于需要开发
小
程序
,前端又是自己弄,类似
table
的标签也没有,后来看到
小
程序
文档中推荐使用flex布局,就把css中的...
赞
踩
article
最终版:1分钟自动部署
数字
人
平台并提供
web
服务:
唇形
合成
(
wav2lip
) + 超分修复(code...
所有接口支持并发(机器配置允许的前提下)使用docker进行部署,环境等所有依赖全部整合完毕,已加密(文末见解密方式)默...
赞
踩
article
同程
面试
经历...
只能怪自己基础不牢,真的是基础不牢。1、ado.net中的五大对象有哪些?如果换成数据库常用到哪些类,我肯定会。这样问我...
赞
踩
article
githack
脚本
分析
...
0x00 前言这里看到源码泄露的问题,所以看到这个脚本,解析中学习一下。0x01 代码详细
分析
1.首先是解决index文...
赞
踩
article
论文笔记:How Can
Large
Language
Models
Understand
Spat...
arxiv 202401论文笔记:How Can
Large
Language
Models
Understand
Sp...
赞
踩
article
聚观
早报 |
华为
Pura70
系列
先锋
计划
;月之暗面升级
Kimi
...
聚观
早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读
聚观
365资讯简报。整理丨Cuti...
赞
踩
相关标签
big data
java重载
为什么索引不支持模糊查询
无法显示调用运算符
python
opencv
深度学习
Dlib
图像处理
人脸识别
人工智能
树莓派 pico
C/C++
数据库
数据仓库
自然语言处理
项目管理
html
微软
css
scrum
软件测试
自动化测试
Python
面试