java编码终极探秘
首先要明白,java中string字符串都是unicode码保存的,只不过显示的时候会根据一定的规则,比如GBK或者是UTF-8去对照表中查找进行显示。
之所以会乱码就是因为使用错了编码方式。
数据是要用来保存和传输的,在保存和传输的时候必定会使用一种默认的编码方式(Charset.default().name())可以获得.
本质上来讲,所有的数据在计算机中都是二进制,都是字节,“中”是两个字节,byte[2].按照utf-8和gbk编码方式来保存,这两个字节内容是肯定不一样的,但是在string中对应的unicode是一样的。
new String("中文".getBytes("UTF-8"),"GBK").就是将 “中文”转换为"UTF-8"字节,然后在GBK对照表中查找显示,肯定会乱码;
http://wenku.baidu.com/link?url=HSXqdRMUpM78cpw42snv5st54ppevjjTLI7js3psIbXyRLo_5x6zndAVWlJ5sCCepA9HpQ1U7yHQYKrn-2fI1-syt-UwEnSTQ_hpCT1JSBi
解决方案:
1、使用encodeURI编码,java中解码 看看编码方式的不同
2、自己实现,使用unicode传递
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
在前端页面直接传递参数时,普通可以使用escape和encodeURIComponent;
如果要向后台传递参数就要使用encodeURI,对应到java解码使用URLDecoder.decode(logo_name,"UTF-8");
1、传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
例如:
<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7& u='+encodeURIComponent
("http://cang.baidu.com/bruce42")+'">退出</a& gt;');</script>
2、进行url跳转时可以整体使用encodeURI
例如: Location.href=encodeURI(http://cang.baidu.com/do/s?word=中国&ct=21);
使用这个方法编码的字符在PHP中可以使用urldecode()函数反编码
3、js使用数据时可以使用escape
escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
java编码终极探秘的更多相关文章
- java编码过滤器
1.java编码过滤器的作用: java过滤器能够对目标资源的请求和响应进行截取,过滤信息执行的优先级高于servlet. 2.java过滤器的使用: (1)编写一个普通的java类,实现Filter ...
- java中文乱码解决之道(四)-----java编码转换过程
前面三篇博客侧重介绍字符.编码问题,通过这三篇博客各位博友对各种字符编码有了一个初步的了解,要了解java的中文问题这是必须要了解的.但是了解这些仅仅只是一个开始,以下博客将侧重介绍java乱码是如何 ...
- 资料推荐--Google Java编码规范
之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然这篇文章的 ...
- Java编码规范
1. Java命名约定 除了以下几个特例之外,命名时应始终采用完整的英文描述符.此外,一般应采用小写字母,但类名.接口名以及任何非初始单词的第一个字母要大写.1.1 一般概念 n 尽量使用完整 ...
- 10个精妙的Java编码最佳实践
这是一个比Josh Bloch的Effective Java规则更精妙的10条Java编码实践的列表.和Josh Bloch的列表容易学习并且关注日常情况相比,这个列表将包含涉及API/SPI设计中不 ...
- Eclipse formater(google Java 编码规范)
1. 谷歌Java编码规范 http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 2. 下载配置文件: https://co ...
- 【JAVA编码专题】总结
第一部分:编码基础 为什么需要编码:用计算机看得懂的语言(二进制数)表示各种各样的字符. 一.基本概念 ASCII.Unicode.big5.GBK等为字符集,它们只定义了这个字符集内有哪些字符,以及 ...
- 【JAVA编码专题】深入分析 Java 中的中文编码问题
http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么 ...
- java中文乱码解决之道(四)—–java编码转换过程
原文出处:http://cmsblogs.com/?p=1475 前面三篇博客侧重介绍字符.编码问题,通过这三篇博客各位博友对各种字符编码有了一个初步的了解,要了解java的中文问题这是必须要了解的. ...
随机推荐
- sharepoint第三方程序认证尝试失败记录
本来想用REST服务开发第三方的插件的,下面的文章说明REST API是非常好用的 https://technet.microsoft.com/zh-cn/library/jj164022(v=off ...
- 武大OJ 622. Symmetrical
Description Cyy likes something symmetrical, and Han Move likes something circular. Han Mov ...
- 工作流框架Activiti
最近在看一些项目设计方面的文章,涉及到了工作流技术,于是了解一下. 1.概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照 ...
- 27、Java并发性和多线程-CAS(比较和替换)
以下内容转自http://ifeve.com/compare-and-swap/: CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术.简单来说,比较和替换是使用一个期 ...
- Linux Rsync实现文件同步备份(转载)
原文地址:Linux Rsync实现文件同步备份作者:夷北 转自:http://www.mike.org.cn/blog/index.php?load=read&id=639###pp=0 [ ...
- 重啓ubuntu后 VNC 自動運行
Vino-Server是Ubuntu自带的有個缺点:重启后不能自動運行(可能是基於安全吧!) 親身測試对象:windows & ubuntu 10.04已安装图形桌面gnome ***wind ...
- cc2540 cc2541 开发板资料更新日志
经过多次PCB打样和全面调试.已经完毕了cc2540 cc2541的开发板的批量贴片.硬件告一段落, 接下来是全面完好软件方面的工作.眼下已经针对没有开发经验的用户编写完毕0基础基础实验代码和教程.接 ...
- 写给小白的JVM学习指南
Java 虚拟机是学习 Java 的基础,也是迈入高级 Java 开发工程师的必备知识点.所以今天这篇文章我们来聊聊如何从零开始学习 Java 虚拟机. 基础 对于刚刚接触 JVM 的同学来说,JVM ...
- JMeter—丰富报表功能PerfMon插件
可能有童鞋不知道PerfMon插件是干啥的.这里简要说一下: 在做负载測试时,我们要时刻关注server的CPU.MEM--的使用情况,可是JMeter本身对这些信息是不做收集的,这个时候PerfMo ...
- cocos2d-x之android编译环境搭建(第二篇)[版本号:cocos2d-x-3.1.1]
基于 Android NDK 的学习之旅-----环境搭建 工欲善其事 必先利其器 , 以下介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建. 1.Android 开发 ...