文档章节

Java编码和servlet乱码问题(1)-Java编码

阿山du
 阿山du
发布于 2013/12/21 21:31
字数 923
阅读 123
收藏 12
点赞 0
评论 0

    在写这边文章时,在网上扒拉了很久,发现好多博客总结的都非常好,我也是参考了很多,在文章最后会列出一些觉得不错的博客地址,大家如果有兴趣可以去看看。

    本篇主要是简单介绍Java编码知识,如果已经非常了解,可以手抖了,把宝贵时间用到看其他文章上面吧。

    大家都知道中文需要编码后传输才不会有乱码,但是为什么要编码呢,因为计算机的一个最基本的存储单元byte无法表示一个中文字符,所以我们必须先把中文字符经过转换,转换成计算机能够表示的字符。当需要重新读取这些字符时,按照之前的转换规则,再转换回来就可以了。

    这里的转换规则就是我们的所说的编码方式了,常见的有ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16等。首先我们的字符在jvm都是Unicode编码,而上面的那些编码方式就是在传输时或显示时用什么样的编码方式。比如你把字符串以UTF-8编码方式转换成Unicode编码存储,然后等再次读取的时候还是采用UTF-8编码方式来反编码,就能获取到正确的字符。因为Unicode编码采用了世界统一的码表进行编码,因此相同的字符对应不同的系统或环境对应的Unicode码是一样的。

    比如一个字符串“中国”,他的Unicode码是一定的,如果通过getBytes("GBK")方法,其中的内部逻辑就是首先“中国”的Unicode码转换成GBK编码,然后用GBK编码后的数据进行传递。当对方拿到这个字节数组以后,通过new String(recBytes,"GBK"),就能把获取到的GBK编码的字节数组用GBK编码重组后再转换成Unicode编码来存储或显示。但是对于GBK.GB2312,UTF-8等这些双字节编码而言,对中文进行编码、转码完全没有问题,只有前后的编码格式一样就可以,而ISO-8859-1这些单字节编码就不行了,因为是单字节,所以能表示的字符范围是0-255,只能对英文字符、数字等表示。比如对于“中国”,用上面的getBytes("ISO-8859-1"),这时你将得到3f,3f(3f表示?),因为ISO-8859-1没有“中国”的对应字符集,所以只好以?来表示了

    最后要说的是,实际上我们可能会跟各个渠道或设备打交道,比如浏览器、数据库、文件等,在进行转码或存储的时候,最好都指定一个固定的字符集,然后统一进行转换,就不会遇到乱码的问题。对于web项目可能遇到乱码的几率比较大,这个问题会在下一篇文章中集中分析一下。下面附上一些觉得不错的文章,不想看本文的可以直接猛击下面链接。

http://blog.csdn.net/qinysong/article/details/1179513

http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/

http://blog.sina.com.cn/s/blog_000598fc0100tvlz.html

http://www.blogjava.net/zhenandaci/category/31869.html

© 著作权归作者所有

共有 人打赏支持
阿山du
粉丝 0
博文 10
码字总数 7555
作品 0
东城
程序员
【J2EE】之常用的接口和协议

前言 初接触J2EE,会遇到很多之前没有遇到过的术语,下面我们来简单地汇总一下这些接口和协议吧。 各大接口和协议详解 JDBC 1.定义:Java数据库连接 2.地位:用于Java应用程序连接数据库的标...

m18633778874 ⋅ 04/26 ⋅ 0

J2EE中一些常用的名词【简】

web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,W...

anlve ⋅ 昨天 ⋅ 0

Servlet与JSP版本历史以及Tomcat支持的版本

查询这个的关键字:Java EE的版本历史。 JavaServer Pages (JSP) Java Servlet 参考: https://en.wikipedia.org/wiki/JavaEEversion_history https://zh.wikipedia.org/wiki/Java_Servlet 从......

easonjim ⋅ 2016/12/15 ⋅ 0

tomcat支持哪些j2ee技术!

j2ee的13种核心技术:JDBC, JNDI, EJBS, RMI, JSP, JAVA SERVLETS, XML, JMS, JAVA IDL, JTS, JTA, JAVAMAIL 和 JAF tomcat支持的有哪些呢? 我所知道的是 支持:JDBC,JSP,Java Servlet,XML,......

MrBoyce ⋅ 05/14 ⋅ 0

JavaWeb开发比较重要的面试题

JavaWeb开发比较重要的面试题 1. 编码转换:怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串? 答:示例代码如下: String s1=”你好”; String s2=new String(s1.getBytes(“GB2312”...

xj_9264 ⋅ 05/06 ⋅ 0

J2EE进阶(二十三)jar、war、ear包的区别

J2EE进阶(二十三)jar、war、ear包的区别 以最终客户的角度来看,.jar文件就是一种封装,他们不需要知道.jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希望的结果。...

sunhuaqiang1 ⋅ 05/05 ⋅ 0

JAVA程序员面试题整理(较全面)

以下是在面试中可能会遇到的问题,话不多说,往下看 1、面向对象的特征有哪些方面? 2、访问修饰符public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? ...

编程大侠 ⋅ 04/09 ⋅ 0

Spring JMSTemplate 与 JMS 原生API比较

博客分类: JMS Spring 2.x JMSUtil与Spring JmsTemplate的对比 Author:信仰 Date:2012-4-20 未完待续,截止日期2012-4-20 从以下几方面比较JMSUtil和Spring JmsTemplate l 对JNDI的支持 ...

thinkyoung ⋅ 2014/12/12 ⋅ 0

消息队列ActiveMQ的使用详解

通过上一篇文章 《消息队列深入解析》,我们已经消息队列是什么、使用消息队列的好处以及常见消息队列的简单介绍。 这一篇文章,主要带大家详细了解一下消息队列ActiveMQ的使用。 学习消息队...

snailclimb ⋅ 04/24 ⋅ 0

JDBC + SAP云平台 = 运行在云端的数据库应用

在前一篇文章JPA + EclipseLink + SAP云平台 = 运行在云端的数据库应用我介绍了如何通过JPA和EclipseLink操作部署在SAP云平台上的HANA数据库实例。 在这篇文章里,我们使用JDBC代替JPA和Ecl...

JerryWang_SAP ⋅ 05/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 58分钟前 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部