惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
D
DataBreaches.Net
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
小众软件
小众软件
美团技术团队
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
D
Docker
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Hackread – Cybersecurity News, Data Breaches, AI and More
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
S
SegmentFault 最新的问题
云风的 BLOG
云风的 BLOG
B
Blog
雷峰网
雷峰网
The Cloudflare Blog

博客园 - 漂失在蓝天下的云

微软自带的sqlserver的jdbc驱动的缺陷及解决方法 SQL Sever中文乱码的分析解决 - 漂失在蓝天下的云 - 博客园 在asp.net页面中的一些有关编码的问题 - 漂失在蓝天下的云 - 博客园 在ASP.net页面引用js时的注意事项 - 漂失在蓝天下的云 - 博客园 如何处理提交页面是GB2312编码格式,接收页面是UTF-8格式? - 漂失在蓝天下的云 - 博客园 Asp.Net细节性问题技巧精萃 日期正则表达式 什么是正则表达式 正则表达式之道 让你终身受用的4个经典故事 五个寓言故事令你受益匪浅 调用cmd.exe程序和外部程序(转) C#程序调用外部程序 Asp.NET中运行exe 帮你免于失业的十大软件技术! 网站首页head区代码规范(网页设计师必看) 网站首页head区代码规范(网页设计师必看) 一个不错的页面特效 网页制作代码
UTF-8乱码解决
漂失在蓝天下的云 · 2006-10-11 · via 博客园 - 漂失在蓝天下的云

在解决乱码问题前,必须先搞清楚几个相关的问题。

为每个jsp页面设置了其编码格式(utf-8),但传递数据到另一页面时依然显示为乱码?

  首先要需要了解的是web容器默认编码是iso-8859-1,一个汉字占用两个字节,而在utf-8中一个汉字占用三个字节。所以在数据传递过程中,必须手动设定容器编码格式,否则会出现字符位丢失的情况。即3个字节变为两个字节,自然会变成乱码。

为什么保存到数据库中的数据都变成了乱码?

  原理同上,首先要搞清楚使用的数据库默认的编码格式,比如mysql默认的字符编码是ISO-8859-1。所以必须手动修改其默认编码格式。

  清楚了以上问题后,再来看如何解决utf-8的乱码问题。

1.设置web容器的编码格式。为你的servlet的doGet或doPost方法开始处加入如下代码:

request.setCharacterEncoding("utf-8");
   response.setCharacterEncoding("utf-8");

2.为每个jsp页面指定其编码格式。<%@ page pageEncoding="utf-8"%>

3.在连接数据库用的URL后加入:useUnicode=true;characterEncoding=utf-8 如:

  url="jdbc:mysql:///db1?useUnicode=true;characterEncoding=utf-8",

4.为指定数据库默认编码格式。在C:\WINDOWS目录下找到my.ini文件,并在[mysqld]中加入default-character-set=gbk,重新启动mysql服务。

  至此,乱码问题全部解决。起初总搞上去不清,为什么要将mysql的默认编码格式设置为gbk,后来由相关的资料得知utf-8默认输入编码方式为gbk,默认输出编码方式为utf-16be。

  个人认为,将数据进行utf-8进行编码的目的(即将中文编码为%的形式),主要是为了在多层服务间进行数据传输时,防止发生字符丢失(如msn)。普通的web程序显然没有必要这样做,只要使用以上方法进行处理,就可以有效的解决乱码问题,从而结省存储空间。如果都像公司的SC系统那样,将一个汉字编码为18个字符后,再存储到数据库中,抛开效率不说,就存储空间的浪费就够人受的,要知道,那是需要银子地!