2013年1月份网站调整日志

网站在一月份的时候做了点调整

1、增加了feedsky的feed代码,google的统计代码。

2、对于文章最新文章显示也调整为:根据菜单选择不同而显示这一菜单下的最新文章。如网志这个菜单,显示就是归属于这个菜单的文章中最新的文章,即:该分类中的最新文章。

3、顶部的menubar的css以及其中rss也做了调整,中间文字部分的菜单不会在换行了应该。rss的控制css的js还未调整,本计划回家前调整的,怎奈没心情。

4、底部也做了调整,增加了“返回顶部”整个js,但是css调整不当,稍后根据感觉再整整。

5、安装代码高亮的插件,还是不错的,但是唯一一个缺点就是没有修改wp的编辑器,把代码做成按钮的形式,整个来年自己搞一下。

6、侧边栏的最近评论和标签顺序也做了调整,调换了两者的顺序,最新评论看着着实别扭。

另附:之前观察百度两个月里面就只收录一个首页而已,其他的都不在继续收录,后来只是简单的发了两个外链,今天观察已经收录4个了,快照也更新到了1月3号。uv到180,对于我来说已经是个不小的鼓励了,可惜的是一直没有到达pr1。

2013年2月2日0:20:27

HashMap中遍历的两种方式

根据jdk的api中的介绍,hashMap有以下特点:

1)允许使用 null 值和 null

2)非同步(同步需要封装:Map m = Collections.synchronizedMap(new HashMap(…));)

3)HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。如果要保证遍历的效率,则不要将初始容量设置得太高(或将加载因子设置得太低)。默认的加载引子是0.75f。如果存储的entries不超过当前容量和加载因子的累积时,则不会发生 rehash 操作,这样效率查询和存储的效率都会较高(ps:。hashmap最大存储容量1<<30(即:2^30),初始容量是16(1<<4)

大部分情况下,都不会去更改初始容量和加载因子的,系统默认的0.75对时间和空间取了一种折中的方式。

在日常应用中常常会遍历hashmap,根据一个测试代码,发现下面两种遍历方式的效率截然不同。
一、

[code lang=”java”]
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
[/code]

效率高,以后建议采用使用此种方式
二、

[code lang=”java”]
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object val = map.get(key);
}
[/code]

效率低,以后尽量少使用
两种方式的测试代码:

[code lang=”java”]
public class HashMapTest {
public static void main(String[] args) {
HashMap<Integer, String> hashmap = new HashMap<Integer, String>();
for (int i = 0; i < 20000; i++) {
hashmap.put(i, "keyset");
}
long bs = Calendar.getInstance().getTimeInMillis();
Iterator<Integer> iterator = hashmap.keySet().iterator();
while (iterator.hasNext()) {
System.out.print(hashmap.get(iterator.next()));
}
System.out.println("\r\n—keyset遍历——" + bs);
System.out.println(Calendar.getInstance().getTimeInMillis() – bs);
listHashMap();
}
/**
*
* listHashMap 方法
* <p>方法说明:entry iterator</p>
*/
public static void listHashMap() {
HashMap<Integer, String> hashmap = new HashMap<Integer, String>();
for (int i = 0; i < 20000; i++) {
hashmap.put(i, "entry");
}
long bs = Calendar.getInstance().getTimeInMillis();
Iterator<Entry<Integer, String>> it = hashmap.entrySet().iterator();
while (it.hasNext()) {
Entry<Integer, String> entry = it.next();
// entry.getKey() 返回与此项对应的键
// entry.getValue() 返回与此项对应的值
System.out.print(entry.getValue());
}
System.out.println("\r\n—keyEntry遍历——");
System.out.println(Calendar.getInstance().getTimeInMillis() – bs);
}
}
[/code]

对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了

认真过好你的二十几岁

励志的文章看的非常非常的多,但是下面这篇文章是我感触最深的,可能是我现在处于作者的所描述的这个年龄段,而且自己也极度的需要肯定,渴望成功,希望得到指点。《认真过好你的二十几岁》源自外刊IT评论网

“别活得太认真,你逃不出你的命运。” – Van Wilder

这句流行的名言,对于如今的20几岁的青年,看起来就是让他们没有任何目标的自由生活,尽可能的为所欲为,不接受任何指引。作为一个工作狂、一个创业>者,从我自学校毕业,这句话就没有和我产生过共鸣,不仅如此,我甚至还十分慎重的过好每一分钟,因为我知道,20几岁,这是一生中一段非常独特的时间,是人生的其它时间代替不了的。

一个朋友最近推荐我一本书,《The Definining Decade: Why your twenties matter – and how to make the most of them now》。读完之后,我前所未有的认识到了我20几岁这段时间的重要性,它改变了我如何度过20几岁余下这最后几年的人生计划。

出自一位临床心理学家之手,这本书触及到了我们生活的各个关键点:工作,爱情和我们的身体。里面有很多的思想都是非常宝贵的,但最触动我的是下面这三个:

1) 你的20几岁为你之后余下的人生事业打下了成功的基础。

无论你做多长时间的酒吧招待或餐厅服务员,用多长时间在你家后院想你的“创业想法”,你都是在浪费生命,阻挡自己朝着未来更成功、更幸福的生活前进。

也许在星巴克当服务员的日子很快乐,但你的收入能养活你未来的孩子吗?更重要的,你真的打算今后10年仍然干这个吗?如果不是,那你目前的工作是否有助于你迈进你想要的工作的门槛吗?如果你不是Facebook的创始人,也许你应该考虑到一家创业公司开创自己的职业道路,而不是做一个永远都飞不起来的雏鸟。

人都是一步一步走出来的。从刚开始去做那些辛苦的低收入的,能力上绰绰有余的工作,慢慢得到越来越多的机会。我有硕士学位,仍然需要抽出时间来去实习,才能进入科技界的大门。实习工作让我在一家创业公司找到了全职工作,公司的创始人向我引荐了Hiten Shah,他成为了我的导师,现在,我给他的公司开发产品KISSmetrics。他是我见到的最成功的经营自己事业的人,他总是从小事做起。

经验:不要拖延开展自己的事业。越早进入一个行业或成为你希望的角色,越早你能获得你满意的职业生涯。

2) 据统计,女人应该在35岁之前生孩子。

根据作者所说,女人怀孕的能力在35岁左右的时候开始急剧下降。更糟糕的是,超过35岁,四分之一的女性会流产。这是一个令人震惊的数据,让我想象到了一副好不容易受孕却最终流产的场景。没有人想要这样的结果。

20几岁的时候成立家庭的想法和离我很遥远。我把事业放到了其它所有事情之前。但我知道,我最终是要组织一个家庭的。当知道了这些统计数据后,我们更加认清了我做的选择意味这什么、我现在所做的是为了什么。这正好说明了为什么这么多的创业者会在30左右开始建立家庭。

经验:如果组建一个家庭是你的人生目标,那你的时间会比你想象的要少。如果你是一个男的,想娶一个和你年纪相当的女人,时间的脚步走催促着你,同样也在催促着她。

3) 你的大脑中20多岁时成熟定型。

我一直以为人的大脑在孩子时就已经定型,从10几岁到三四十岁之间不会有多少变化,40四十以后开始萎缩。但事实证明,人的前大脑皮层会在20几岁时发生巨大的变化,30几岁时趋于稳定。维基百科上说:

额叶(frontal lobes)职能涉及到从当前的活动中认识将来的后果,影响你在好的活动和不好的活动之间做出的选择,忽视或制止不可接受的社会反应,在一些事情和事件间辨别它们的相似或不同。

作为一个有志向开创一个大型公司的人,我认识到现在就需要培养大量的用来领导这样一个公司的各种技能,因为再过几年你就很难或者根本不可能像现在这样学习知识。我听到很多的创业者在公司做到一定规模后就没有能力(或不想)管理这个公司,我现在正面临着提高自己和培养自己的巨大挑战。

经验: 不管你有什么样的人生或事业目标,你需要认识到,20多岁时获得的技能和人格特性将会决定着你余生的众多能力。

一本值得看的书,规划好你的今天,你的明天会活得更精彩。

JAVA字符编码之Java应用中的编码问题

第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

第二篇:JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换

第三篇:JAVA字符编码系列三:Java应用中的编码问题

1. 概述

本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。

在下面的描述中,将以”中文”两个字为例,经查表可以知道其GB2312编码是”d6d0 cec4″,Unicode编码为”4e2d 6587″,UTF编码就是”e4b8ad e69687″。注意,这两个字没有iso8859-1编码,但可以用iso8859-1编码来”表示”。

2. 编码基本知识

最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码,重要的有如下几个。

2.1. iso8859-1

属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母’a’的编码为0x61=97。

很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用iso8859-1编码来表示。而且在很多协议上,默认使用该编码。比如,虽然”中文”两个字不存在iso8859-1编码,以gb2312编码为例,应该是”d6d0 cec4″两个字符,使用iso8859-1编码的时候则将它拆开为4个字节来表示:”d6 d0 ce c4″(事实上,在进行存储的时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节”e4 b8 ad e6 96 87″。很明显,这种表示方法还需要以另一种编码为基础。

2.2. GB2312/GBK

这就是汉子的国标码,专门用来表示汉字,是双字节编码,而英文字母和iso8859-1一致(兼容iso8859-1编码)。其中gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,gbk是兼容gb2312编码的。

2.3. unicode

这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容iso8859-1编码的,也不兼容任何编码。不过,相对于iso8859-1编码来说,uniocode编码只是在前面增加了一个0字节,比如字母’a’为”00 61″。

需要说明的是,定长编码便于计算机处理(注意GB2312/GBK不是定长编码),而unicode又可以用来表示所有字符,所以在很多软件内部是使用unicode编码来处理的,比如java。

2.4. UTF

考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。

注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然utf编码对汉字使用3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。

3. java对字符的处理

在java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。

3.1. getBytes(charset)

这是java字符串处理的一个标准函数,其作用是将字符串所表示的字符按照charset编码,并以字节方式表示。注意字符串在java内存中总是按unicode编码存储的。比如”中文”,正常情况下(即没有错误的时候)存储为”4e2d 6587″,如果charset为”gbk”,则被编码为”d6d0 cec4″,然后返回字节”d6 d0 ce c4″。如果charset为”utf8″则最后是”e4 b8 ad e6 96 87″。如果是”iso8859-1″,则由于无法编码,最后返回 “3f3f”(两个问号)。

3.2. new String(charset)

这是java字符串处理的另一个标准函数,和上一个函数的作用相反,将字节数组按照charset编码进行组合识别,最后转换为unicode存储。参考上述getBytes的例子,”gbk” 和”utf8″都可以得出正确的结果”4e2d 6587″,但iso8859-1最后变成了”003f003f”(两个问号)。

因为utf8可以用来表示/编码所有字符,所以new String( str.getBytes( “utf8” ), “utf8” ) === str,即完全可逆。

3.3. setCharacterEncoding()

该函数用来设置http请求或者相应的编码。

对于request,是指提交内容的编码,指定后可以通过getParameter()则直接获得正确的字符串,如果不指定,则默认使用iso8859-1编码,需要进一步处理。参见下述”表单输入”。值得注意的是在执行setCharacterEncoding()之前,不能执行任何getParameter()。java doc上说明:This method must be called prior to reading request parameters or reading input using getReader()。而且,该指定只对POST方法有效,对GET方法无效。分析原因,应该是在执行第一个getParameter()的时候,java将会按照编码分析所有的提交内容,而后续的getParameter()不再进行分析,所以setCharacterEncoding()无效。而对于GET方法提交表单是,提交的内容在URL中,一开始就已经按照编码分析所有的提交内容,setCharacterEncoding()自然就无效。

对于response,则是指定输出内容的编码,同时,该设置会传递给浏览器,告诉浏览器输出内容所采用的编码。

3.4. 处理过程

下面分析两个有代表性的例子,说明java对编码有关问题的处理方法。

3.4.1. 表单输入

User input  *(gbk:d6d0 cec4)  browser  *(gbk:d6d0 cec4)  web server  iso8859-1(00d6 00d 000ce00c4)  class,需要在class中进行处理:getbytes(“iso8859-1”)为d6 d0 ce c4,new String(“gbk”)为d6d0 cec4,内存中以unicode编码则为4e2d 6587。

用户输入的编码方式和页面指定的编码有关,也和用户的操作系统有关,所以是不确定的,上例以gbk为例。

从browser到web server,可以在表单中指定提交内容时使用的字符集,否则会使用页面指定的编码。而如果在url中直接用?的方式输入参数,则其编码往往是操作系统本身的编码,因为这时和页面无关。上述仍旧以gbk编码为例。

Web server接收到的是字节流,默认时(getParameter)会以iso8859-1编码处理之,结果是不正确的,所以需要进行处理。但如果预先设置了编码(通过request. setCharacterEncoding ()),则能够直接获取到正确的结果。

l 在页面中指定编码是个好习惯,否则可能失去控制,无法指定正确的编码。

3.4.2. 文件编译

假设文件是gbk编码保存的,而编译有两种编码选择:gbk或者iso8859-1,前者是中文windows的默认编码,后者是linux的默认编码,当然也可以在编译时指定编码。

Jsp  *(gbk:d6d0 cec4)  java file  *(gbk:d6d0 cec4)  compiler read  uincode(gbk: 4e2d 6587; iso8859-1: 00d6 00d 000ce00c4)  compiler write  utf(gbk: e4b8ad e69687; iso8859-1: *)  compiled file  unicode(gbk: 4e2d 6587; iso8859-1: 00d6 00d 000ce00c4)  class。所以用gbk编码保存,而用iso8859-1编译的结果是不正确的。

class  unicode(4e2d 6587)  system.out / jsp.out  gbk(d6d0 cec4)  os console / browser。

l 文件可以以多种编码方式保存,中文windows下,默认为ansi/gbk。

l 编译器读取文件时,需要得到文件的编码,如果未指定,则使用系统默认编码。一般class文件,是以系统默认编码保存的,所以编译不会出问题,但对于jsp文件,如果在中文windows下编辑保存,而部署在英文linux下运行/编译,则会出现问题。所以需要在jsp文件中用pageEncoding指定编码。

l Java编译的时候会转换成统一的unicode编码处理,最后保存的时候再转换为utf编码。

l 当系统输出字符的时候,会按指定编码输出,对于中文windows下,System.out将使用gbk编码,而对于response(浏览器),则使用jsp文件头指定的contentType,或者可以直接为response指定编码。同时,会告诉browser网页的编码。如果未指定,则会使用iso8859-1编码。对于中文,应该为browser指定输出字符串的编码。

l browser显示网页的时候,首先使用response中指定的编码(jsp文件头指定的contentType最终也反映在response上),如果未指定,则会使用网页中meta项指定中的contentType。

3.5. 几处设置

对于web应用程序,和编码有关的设置或者函数如下。

3.5.1. jsp编译

指定文件的存储编码,很明显,该设置应该置于文件的开头。例如:<%@page pageEncoding=”GBK”%>。另外,对于一般class文件,可以在编译的时候指定编码。

3.5.2. jsp输出

指定文件输出到browser是使用的编码,该设置也应该置于文件的开头。例如:<%@ page contentType=”text/html; charset= GBK” %>。该设置和response.setCharacterEncoding(“GBK”)等效。

3.5.3. meta设置

指定网页使用的编码,该设置对静态网页尤其有作用。因为静态网页无法采用jsp的设置,而且也无法执行response.setCharacterEncoding()。例如:<METAhttp-equiv=”Content-Type” content=”text/html; charset=GBK” />

如果同时采用了jsp输出和meta设置两种编码指定方式,则jsp指定的优先。因为jsp指定的直接体现在response中。

需要注意的是,apache有一个设置可以给无编码指定的网页指定编码,该指定等同于jsp的编码指定方式,所以会覆盖静态网页中的meta指定。所以有人建议关闭该设置。

3.5.4. form设置

当浏览器提交表单的时候,可以指定相应的编码。例如:<form accept-charset= “gb2312″>。一般不必不使用该设置,浏览器会直接使用网页的编码。

4. 系统软件

下面讨论几个相关的系统软件。

4.1. mysql数据库

很明显,要支持多语言,应该将数据库的编码设置成utf或者unicode,而utf更适合与存储。但是,如果中文数据中包含的英文字母很少,其实unicode更为适合。

数据库的编码可以通过mysql的配置文件设置,例如default-character-set=utf8。还可以在数据库链接URL中设置,例如: useUnicode=true&characterEncoding=UTF-8。注意这两者应该保持一致,在新的sql版本里,在数据库链接URL里可以不进行设置,但也不能是错误的设置。

4.2. apache

appache和编码有关的配置在httpd.conf中,例如AddDefaultCharset UTF-8。如前所述,该功能会将所有静态页面的编码设置为UTF-8,最好关闭该功能。

另外,apache还有单独的模块来处理网页响应头,其中也可能对编码进行设置。

4.3. linux默认编码

这里所说的linux默认编码,是指运行时的环境变量。两个重要的环境变量是LC_ALL和LANG,默认编码会影响到java URLEncode的行为,下面有描述。

建议都设置为”zh_CN.UTF-8″。

4.4. 其它

为了支持中文文件名,linux在加载磁盘时应该指定字符集,例如:mount /dev/hda5 /mnt/hda5/ -t ntfs -o iocharset=gb2312。

另外,如前所述,使用GET方法提交的信息不支持request.setCharacterEncoding(),但可以通过tomcat的配置文件指定字符集,在tomcat的server.xml文件中,形如:<Connector … URIEncoding=”GBK”/>。这种方法将统一设置所有请求,而不能针对具体页面进行设置,也不一定和browser使用的编码相同,所以有时候并不是所期望的。

5. URL地址

URL地址中含有中文字符是很麻烦的,前面描述过使用GET方法提交表单的情况,使用GET方法时,参数就是包含在URL中。

5.1. URL编码

对于URL中的一些特殊字符,浏览器会自动进行编码。这些字符除了”/?&”等外,还包括unicode字符,比如汉子。这时的编码比较特殊。

IE有一个选项”总是使用UTF-8发送URL”,当该选项有效时,IE将会对特殊字符进行UTF-8编码,同时进行URL编码。如果改选项无效,则使用默认编码”GBK”,并且不进行URL编码。但是,对于URL后面的参数,则总是不进行编码,相当于UTF-8选项无效。比如”中文.html?a=中文”,当UTF-8选项有效时,将发送链接”%e4%b8%ad%e6%96%87.html?a=\x4e\x2d\x65\x87″;而UTF-8选项无效时,将发送链接”\x4e\x2d\x65\x87.html?a=\x4e\x2d\x65\x87″。注意后者前面的”中文”两个字只有4个字节,而前者却有18个字节,这主要时URL编码的原因。

当web server(tomcat)接收到该链接时,将会进行URL解码,即去掉”%”,同时按照ISO8859-1编码(上面已经描述,可以使用URLEncoding来设置成其它编码)识别。上述例子的结果分别是”\ue4\ub8\uad\ue6\u96\u87.html?a=\u4e\u2d\u65\u87″和”\u4e\u2d\u65\u87.html?a=\u4e\u2d\u65\u87″,注意前者前面的”中文”两个字恢复成了6个字符。这里用”\u”,表示是unicode。

所以,由于客户端设置的不同,相同的链接,在服务器上得到了不同结果。这个问题不少人都遇到,却没有很好的解决办法。所以有的网站会建议用户尝试关闭UTF-8选项。不过,下面会描述一个更好的处理办法。

5.2. rewrite

熟悉的人都知道,apache有一个功能强大的rewrite模块,这里不描述其功能。需要说明的是该模块会自动将URL解码(去除%),即完成上述web server(tomcat)的部分功能。有相关文档介绍说可以使用[NE]参数来关闭该功能,但我试验并未成功,可能是因为版本(我使用的是apache2.0.54)问题。另外,当参数中含有”?& “等符号的时候,该功能将导致系统得不到正常结果。

rewrite本身似乎完全是采用字节处理的方式,而不考虑字符串的编码,所以不会带来编码问题。

5.3. URLEncode.encode()

这是Java本身提供对的URL编码函数,完成的工作和上述UTF-8选项有效时浏览器所做的工作相似。值得说明的是,java已经不赞成不指定编码来使用该方法(deprecated)。应该在使用的时候增加编码指定。

当不指定编码的时候,该方法使用系统默认编码,这会导致软件运行结果得不确定。比如对于”中文”,当系统默认编码为”gb2312″时,结果是”%4e%2d%65%87″,而默认编码为”UTF-8″,结果却是”%e4%b8%ad%e6%96%87″,后续程序将难以处理。另外,这儿说的系统默认编码是由运行tomcat时的环境变量LC_ALL和LANG等决定的,曾经出现过tomcat重启后就出现乱码的问题,最后才郁闷的发现是因为修改修改了这两个环境变量。

建议统一指定为”UTF-8″编码,可能需要修改相应的程序。

6. 其它

下面描述一些和编码有关的其他问题。

6.1. SecureCRT

除了浏览器和控制台与编码有关外,一些客户端也很有关系。比如在使用SecureCRT连接linux时,应该让SecureCRT的显示编码(不同的session,可以有不同的编码设置)和linux的编码环境变量保持一致。否则看到的一些帮助信息,就可能是乱码。

另外,mysql有自己的编码设置,也应该保持和SecureCRT的显示编码一致。否则通过SecureCRT执行sql语句的时候,可能无法处理中文字符,查询结果也会出现乱码。

对于Utf-8文件,很多编辑器(比如记事本)会在文件开头增加三个不可见的标志字节,如果作为mysql的输入文件,则必须要去掉这三个字符。(用linux的vi保存可以去掉这三个字符)。一个有趣的现象是,在中文windows下,创建一个新txt文件,用记事本打开,输入”连通”两个字,保存,再打开,你会发现两个字没了,只留下一个小黑点。

6.2. 过滤器

如果需要统一设置编码,则通过filter进行设置是个不错的选择。在filter class中,可以统一为需要的请求或者回应设置编码。参加上述setCharacterEncoding()。这个类apache已经给出了可以直接使用的例子SetCharacterEncodingFilter。

6.3. POST和GET

很明显,以POST提交信息时,URL有更好的可读性,而且可以方便的使用setCharacterEncoding()来处理字符集问题。但GET方法形成的URL能够更容易表达网页的实际内容,也能够用于收藏。

从统一的角度考虑问题,建议采用GET方法,这要求在程序中获得参数是进行特殊处理,而无法使用setCharacterEncoding()的便利,如果不考虑rewrite,就不存在IE的UTF-8问题,可以考虑通过设置URIEncoding来方便获取URL中的参数。

6.4. 简繁体编码转换

GBK同时包含简体和繁体编码,也就是说同一个字,由于编码不同,在GBK编码下属于两个字。有时候,为了正确取得完整的结果,应该将繁体和简体进行统一。可以考虑将UTF、GBK中的所有繁体字,转换为相应的简体字,BIG5编码的数据,也应该转化成相应的简体字。当然,仍旧以UTF编码存储。

例如,对于”语言 語言”,用UTF表示为”\xE8\xAF\xAD\xE8\xA8\x80 \xE8\xAA\x9E\xE8\xA8\x80″,进行简繁体编码转换后应该是两个相同的 “\xE8\xAF\xAD\xE8\xA8\x80>”。

JAVA字符编码系列之Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问题,特别是乱码问题,我觉得组成一个系列来描述和分析更好一些,包括三篇文章:

第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

第二篇:JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换

第三篇:JAVA字符编码系列三:Java应用中的编码问题

1、函数介绍

在Java中,字符串用统一的Unicode编码,每个字符占用两个字节,与编码有关的两个主要函数为:

1)将字符串用指定的编码集合解析成字节数组,完成Unicode-〉charsetName转换

public byte[] getBytes(String charsetName) throws UnsupportedEncodingException

2)将字节数组以指定的编码集合构造成字符串,完成charsetName-〉Unicode转换

public String(byte[] bytes, String charsetName) throws UnsupportedEncodingException

2、Unicode与各编码之间的直接转换

下面以对中文字符串"a中文"的编码转换为例,来了解各种编码之间的转换

1)Unicode和GBK

测试结果如下,每个汉字转换为两个字节,且是可逆的,即通过字节可以转换回字符串

String-GBK〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4

ByteArray-GBK〉String:0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)

2)Unicode和UTF-8

测试结果如下,每个汉字转换为三个字节,且是可逆的,即通过字节可以转换回字符串

String-UTF-8〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87

ByteArray-UTF-8〉String:0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6587(a中文)

3)Unicode和ISO-8859-1

测试结果如下,当存在汉字时转换失败,非可逆,即通过字节不能再转换回字符串

String-ISO-8859-1〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0x3F0x3F

ByteArray-ISO-8859-1〉String:0x61 0x3F0x3F-〉\u0061\u003F\u003F(a??)

3、Unicode与各编码之间的交叉转换

在上面直接转换中,由字符串(Unicode)生成的字节数组,在构造回字符串时,使用的是正确的编码集合,如果使用的不是正确的编码集合会怎样呢?会正确构造吗?如果不能正确构造能有办法恢复吗?会信息丢失吗?

下面我们就来看看这种情况,这部分可以说明在某些情况下虽然我们最终正确显示了结果,但其间仍然进行了不正确的转换。

1)能够正确显示的中间不正确转换

我们知道String-GBK〉ByteArray-GBK〉String是正确的,但如果我们采用String-GBK〉ByteArray-ISO-8859-1〉String呢?通过测试结果如下:

String-GBK〉ByteArray-ISO-8859-1〉String:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u00D6\u00D0\u00CE\u00C4(a????)

这时我们得到的字符串为?乱码“a????”,但是通过继续转换我们仍然可以复原回正确的字符串“a中文”,过程如下:

String-GBK〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-GBK〉String

对应:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u00D6\u00D0\u00CE\u00C4(a????)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)

也就是我们在首次构造字符串时,我们用了错误的编码集合得到了错误的乱码,但是我们通过错上加错,再用错误的编码集合获取字节数组,然后再用正确的编码集合构造,就又恢复了正确的字符串。这时就属于是“能够正确显示的中间不正确转换”。在Jsp页面提交数据处理时常常发生这种情况。

此外能够正确显示的中间不正确转换还有:

String-UTF-8〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-UTF-8〉String

String-UTF-8〉ByteArray-GBK〉String-GBK〉ByteArray-UTF-8〉String

对应:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u6D93\uE15F\u6783(a涓枃)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6587(a中文)

4、编码过程中错误诊断参考

1)一个汉字对应一个问号

在通过ISO-8859-1从字符串获取字节数组时,由于一个Unicode转换成一个byte,当遇到不认识的Unicode时,转换为0x3F,这样无论用哪种编码构造时都会产生一个?乱码。

2)一个汉字对应两个问号

在通过GBK从字符串获取字节数组时,由于一个Unicode转换成两个byte,如果此时用ISO-8859-1或用UTF-8构造字符串就会出现两个问号。

若是通过ISO-8859-1构造可以再通过上面所说的错上加错恢复(即再通过从ISO-8859-1解析,用GBK构造);

若是通过UTF-8构造则会产生Unicode字符"\uFFFD",不能恢复,若再通过String-UTF-8〉ByteArray-GBK〉String,则会出现杂码,如a锟斤拷锟斤拷

3)一个汉字对应三个问号

在通过UTF-8从字符串获取字节数组时,由于一个Unicode转换成三个byte,如果此时用ISO-8859-1构造字符串就会出现三个问号;用GBK构造字符串就会出现杂码,如a涓枃。

JAVA字符编码系列之Unicode,GBK,GB2312,UTF-8概念基础

这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考。

为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问题,特别是乱码问题,我觉得组成一个系列来描述和分析更好一些,包括三篇文章:

第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

第二篇:JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换

第三篇:JAVA字符编码系列三:Java应用中的编码问题

Unicode:

unicode.org制定的编码机制, 要将全世界常用文字都函括进去.

在1.0中是16位编码, 由U+0000到U+FFFF. 每个2byte码对应一个字符; 在2.0开始抛弃了16位限制, 原来的16位作为基本位平面, 另外增加了16个位平面, 相当于20位编码, 编码范围0到0x10FFFF.

UCS:

ISO制定的ISO10646标准所定义的 Universal Character Set, 采用4byte编码.

Unicode与UCS的关系:

ISO与unicode.org是两个不同的组织, 因此最初制定了不同的标准; 但自从unicode2.0开始, unicode采用了与ISO 10646-1相同的字库和字码, ISO也承诺ISO10646将不会给超出0x10FFFF的UCS-4编码赋值, 使得两者保持一致.

UCS的编码方式:

UCS-2, 与unicode的2byte编码基本一样.

UCS-4, 4byte编码, 目前是在UCS-2前加上2个全零的byte.

UTF: Unicode/UCS Transformation Format

UTF-8, 8bit编码, ASCII不作变换, 其他字符做变长编码, 每个字符1-3 byte. 通常作为外码. 有以下优点:

* 与CPU字节顺序无关, 可以在不同平台之间交流

* 容错能力高, 任何一个字节损坏后, 最多只会导致一个编码码位损失, 不会链锁错误(如GB码错一个字节就会整行乱码)

UTF-16, 16bit编码, 是变长码, 大致相当于20位编码, 值在0到0x10FFFF之间, 基本上就是unicode编码的实现. 它是变长码, 与CPU字序有关, 但因为最省空间, 常作为网络传输的外码.

UTF-16是unicode的preferred encoding.

UTF-32, 仅使用了unicode范围(0到0x10FFFF)的32位编码, 相当于UCS-4的子集.

UTF与unicode的关系:

Unicode是一个字符集, 可以看作为内码.

而UTF是一种编码方式, 它的出现是因为unicode不适宜在某些场合直接传输和处理. UTF-16直接就是unicode编码, 没有变换, 但它包含了0x00在编码内, 头256字节码的第一个byte都是0x00, 在操作系统(C语言)中有特殊意义, 会引起问题. 采用UTF-8编码对unicode的直接编码作些变换可以避免这问题, 并带来一些优点.

中国国标编码:

GB13000: 完全等同于ISO 10646-1/Unicode 2.1, 今后也将随ISO 10646/Unicode的标准更改而同步更改.

GBK: 对GB2312的扩充, 以容纳GB2312字符集范围以外的Unicode 2.1的统一汉字部分, 并且增加了部分unicode中没有的字符.

GB18030-2000: 基于GB13000, 作为Unicode 3.0的GBK扩展版本, 覆盖了所有unicode编码, 地位等同于UTF-8, UTF-16, 是一种unicode编码形式. 变长编码, 用单字节/双字节/4字节对字符编码. GB18030向下兼容GB2312/GBK.

GB18030是中国所有非手持/嵌入式计算机系统的强制实施标准.

——————————-

什么是 UCS 和 ISO 10646?

国际标准 ISO 10646 定义了 通用字符集 (Universal Character Set, UCS). UCS 是所有其他字符集标准的一个超集. 它保证与其他字符集是双向兼容的. 就是说, 如果你将任何文本字符串翻译到 UCS格式, 然后再翻译回原编码, 你不会丢失任何信息.

UCS 包含了用于表达所有已知语言的字符. 不仅包括拉丁语,希腊语, 斯拉夫语,希伯来语,阿拉伯语,亚美尼亚语和乔治亚语的描述, 还包括中文, 日文和韩文这样的象形文字, 以及 平假名, 片假名, 孟加拉语, 旁遮普语果鲁穆奇字符(Gurmukhi), 泰米尔语, 印.埃纳德语(Kannada), Malayalam, 泰国语, 老挝语, 汉语拼音(Bopomofo), Hangul, Devangari, Gujarati, Oriya, Telugu 以及其他数也数不清的语. 对于还没有加入的语言, 由于正在研究怎样在计算机中最好地编码它们, 因而最终它们都将被加入. 这些语言包括 Tibetian, 高棉语, Runic(古代北欧文字), 埃塞俄比亚语, 其他象形文字, 以及各种各样的印-欧语系的语言, 还包括挑选出来的艺术语言比如 Tengwar, Cirth 和 克林贡语(Klingon). UCS 还包括大量的图形的, 印刷用的, 数学用的和科学用的符号, 包括所有由 TeX, Postscript, MS-DOS,MS-Windows, Macintosh, OCR 字体, 以及许多其他字处理和出版系统提供的字符.

ISO 10646 定义了一个 31 位的字符集. 然而, 在这巨大的编码空间中, 迄今为止只分配了前 65534 个码位 (0x0000 到 0xFFFD). 这个 UCS 的 16位子集称为 基本多语言面 (Basic Multilingual Plane, BMP). 将被编码在 16 位 BMP 以外的字符都属于非常特殊的字符(比如象形文字), 且只有专家在历史和科学领域里才会用到它们. 按当前的计划, 将来也许再也不会有字符被分配到从 0x000000 到 0x10FFFF 这个覆盖了超过 100 万个潜在的未来字符的 21 位的编码空间以外去了. ISO 10646-1 标准第一次发表于1993年, 定义了字符集与 BMP 中内容的架构. 定义 BMP 以外的字符编码的第二部分 ISO 10646-2 正在准备中, 但也许要过好几年才能完成. 新的字符仍源源不断地加入到 BMP 中, 但已经存在的字符是稳定的且不会再改变了.

UCS 不仅给每个字符分配一个代码, 而且赋予了一个正式的名字. 表示一个 UCS 或 Unicode 值的十六进制数, 通常在前面加上 “U+”, 就象 U+0041 代表字符”拉丁大写字母A”. UCS 字符 U+0000 到 U+007F与 US-ASCII(ISO 646) 是一致的, U+0000 到 U+00FF 与 ISO 8859-1(Latin-1) 也是一致的. 从 U+E000 到 U+F8FF, 已经 BMP 以外的大范围的编码是为私用保留的.

什么是组合字符?

UCS里有些编码点分配给了 组合字符.它们类似于打字机上的无间隔重音键. 单个的组合字符不是一个完整的字符. 它是一个类似于重音符或其他指示标记, 加在前一个字符后面. 因而, 重音符可以加在任何字符后面. 那些最重要的被加重的字符, 就象普通语言的正字法(orthographies of common languages)里用到的那种, 在 UCS 里都有自己的位置, 以确保同老的字符集的向后兼容性. 既有自己的编码位置, 又可以表示为一个普通字符跟随一个组合字符的被加重字符, 被称为 预作字符(precomposed characters). UCS 里的预作字符是为了同没有预作字符的旧编码, 比如 ISO 8859, 保持向后兼容性而设的. 组合字符机制允许在任何字符后加上重音符或其他指示标记, 这在科学符号中特别有用, 比如数学方程式和国际音标字母, 可能会需要在一个基本字符后组合上一个或多个指示标记.

组合字符跟随着被修饰的字符. 比如, 德语中的元音变音字符 (“拉丁大写字母A 加上分音符”), 既可以表示为 UCS 码 U+00C4 的预作字符, 也可以表示成一个普通 “拉丁大写字母A” 跟着一个”组合分音符”:U+0041 U+0308 这样的组合. 当需要堆叠多个重音符, 或在一个基本字符的上面和下面都要加上组合标记时, 可以使用多个组合字符. 比如在泰国文中, 一个基本字符最多可加上两个组合字符.

什么是 UCS 实现级别?

不是所有的系统都需要支持象组合字符这样的 UCS 里所有的先进机制. 因此 ISO 10646 指定了下列三种实现级别:

级别1

不支持组合字符和 Hangul Jamo 字符 (一种特别的, 更加复杂的韩国文的编码, 使用两个或三个子字符来编码一个韩文音节)

级别2

类似于级别1, 但在某些文字中, 允许一列固定的组合字符 (例如, 希伯来文, 阿拉伯文, Devangari, 孟加拉语, 果鲁穆奇语, Gujarati, Oriya, 泰米尔语, Telugo, 印.埃纳德语, Malayalam, 泰国语和老挝语). 如果没有这最起码的几个组合字符, UCS 就不能完整地表达这些语言.

级别3

支持所有的 UCS 字符, 例如数学家可以在任意一个字符上加上一个 tilde(颚化符号,西班牙语字母上面的~)或一个箭头(或两者都加).

什么是 Unicode?

历史上, 有两个独立的, 创立单一字符集的尝试. 一个是国际标准化组织(ISO)的 ISO 10646 项目, 另一个是由(一开始大多是美国的)多语言软件制造商组成的协会组织的 Unicode 项目. 幸运的是,1991年前后, 两个项目的参与者都认识到, 世界不需要两个不同的单一字符集. 它们合并双方的工作成果, 并为创立一个单一编码表而协同工作. 两个项目仍都存在并独立地公布各自的标准, 但 Unicode 协会和 ISO/IEC JTC1/SC2 都同意保持 Unicode 和 ISO 10646 标准的码表兼容, 并紧密地共同调整任何未来的扩展.

那么 Unicode 和 ISO 10646 不同在什么地方?

Unicode 协会公布的 Unicode 标准 严密地包含了 ISO 10646-1 实现级别3的基本多语言面. 在两个标准里所有的字符都在相同的位置并且有相同的名字.

Unicode 标准额外定义了许多与字符有关的语义符号学, 一般而言是对于实现高质量的印刷出版系统的更好的参考. Unicode 详细说明了绘制某些语言(比如阿拉伯语)表达形式的算法, 处理双向文字(比如拉丁与希伯来文混合文字)的算法和 排序与字符串比较 所需的算法, 以及其他许多东西.

另一方面, ISO 10646 标准, 就象广为人知的 ISO 8859 标准一样, 只不过是一个简单的字符集表. 它指定了一些与标准有关的术语, 定义了一些编码的别名, 并包括了规范说明, 指定了怎样使用 UCS 连接其他 ISO 标准的实现, 比如 ISO 6429 和 ISO2022. 还有一些与 ISO 紧密相关的, 比如 ISO 14651 是关于 UCS 字符串排序的.

考虑到 Unicode 标准有一个易记的名字, 且在任何好的书店里的 Addison-Wesley 里有, 只花费 ISO 版本的一小部分, 且包括更多的辅助信息, 因而它成为使用广泛得多的参考也就不足为奇了. 然而, 一般认为, 用于打印 ISO 10646-1 标准的字体在某些方面的质量要高于用于打印 Unicode 2.0的. 专业字体设计者总是被建议说要两个标准都实现, 但一些提供的样例字形有显著的区别. ISO 10646-1 标准同样使用四种不同的风格变体来显示表意文字如中文, 日文和韩文 (CJK), 而 Unicode 2.0 的表里只有中文的变体. 这导致了普遍的认为 Unicode 对日本用户来说是不可接收的传说, 尽管是错误的.

什么是 UTF-8?

首先 UCS 和 Unicode 只是分配整数给字符的编码表. 现在存在好几种将一串字符表示为一串字节的方法. 最显而易见的两种方法是将 Unicode 文本存储为 2 个 或 4 个字节序列的串. 这两种方法的正式名称分别为 UCS-2 和 UCS-4. 除非另外指定, 否则大多数的字节都是这样的(Bigendian convention). 将一个 ASCII 或 Latin-1 的文件转换成 UCS-2 只需简单地在每个 ASCII 字节前插入 0x00. 如果要转换成 UCS-4, 则必须在每个 ASCII 字节前插入三个 0x00.

在 Unix 下使用 UCS-2 (或 UCS-4) 会导致非常严重的问题. 用这些编码的字符串会包含一些特殊的字符, 比如 ‘\0’ 或 ‘/’, 它们在 文件名和其他 C 库函数参数里都有特别的含义. 另外, 大多数使用 ASCII 文件的 UNIX 下的工具, 如果不进行重大修改是无法读取 16 位的字符的. 基于这些原因, 在文件名, 文本文件, 环境变量等地方, UCS-2 不适合作为 Unicode 的外部编码.

在 ISO 10646-1 Annex R 和 RFC 2279 里定义的 UTF-8 编码没有这些问题. 它是在 Unix 风格的操作系统下使用 Unicode 的明显的方法.

UTF-8 有一下特性:

UCS 字符 U+0000 到 U+007F(ASCII) 被编码为字节 0x00 到 0x7F(ASCII 兼容). 这意味着只包含 7 位 ASCII 字符的文件在 ASCII 和 UTF-8 两种编码方式下是一样的.

所有 >U+007F的 UCS 字符被编码为一个多个字节的串, 每个字节都有标记位集. 因此, ASCII 字节 (0x00-0x7F) 不可能作为任何其他字符的一部分.

表示非 ASCII 字符的多字节串的第一个字节总是在 0xC0 到 0xFD 的范围里, 并指出这个字符包含多少个字节. 多字节串的其余字节都在 0x80 到 0xBF 范围里. 这使得重新同步非常容易, 并使编码无国界, 且很少受丢失字节的影响.

可以编入所有可能的 231个 UCS 代码

UTF-8 编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长.

Bigendian UCS-4 字节串的排列顺序是预定的.

字节 0xFE 和 0xFF 在 UTF-8 编码中从未用到.

下列字节串用来表示一个字符. 用到哪个串取决于该字符在 Unicode 中的序号.

U-00000000 – U-0000007F:  0xxxxxxx

U-00000080 – U-000007FF:  110xxxxx 10xxxxxx

U-00000800 – U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx

U-00010000 – U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

U-00200000 – U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

U-04000000 – U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

xxx 的位置由字符编码数的二进制表示的位填入. 越靠右的 x 具有越少的特殊意义. 只用最短的那个足够表达一个字符编码数的多字节串. 注意在多字节串中, 第一个字节的开头”1″的数目就是整个串中字节的数目.

例如: Unicode 字符 U+00A9 = 10101001(版权符号) 在 UTF-8 里的编码为:

11000010 10101001= 0xC2 0xA9

而字符 U+2260 = 0010 0010 0110 0000 (不等于) 编码为:

11100010 1000100110100000 = 0xE2 0x89 0xA0

这种编码的官方名字拼写为 UTF-8, 其中 UTF 代表 UCS Transformation Format. 请勿在任何文档中用其他名字 (比如 utf8 或 UTF_8) 来表示 UTF-8, 当然除非你指的是一个变量名而不是这种编码本身.

什么编程语言支持 Unicode?

在大约1993年之后开发的大多数现代编程语言都有一个特别的数据类型, 叫做 Unicode/ISO 10646-1 字符. 在 Ada95 中叫 Wide_Character, 在 Java 中叫 char.

ISO C 也详细说明了处理多字节编码和宽字符 (wide characters) 的机制,1994年 9 月 Amendment 1 to ISO C 发表时又加入了更多. 这些机制主要是为各类东亚编码而设计的, 它们比处理 UCS 所需的要健壮得多. UTF-8 是 ISO C 标准调用多字节字符串的编码的一个例子, wchar_t 类型可以用来存放 Unicode 字符.

轻松淘宝客chrome插件

    Chrome Web store,在浏览器中安装插件,灵活、简单,随时卸载,不用因为安装过多的客户端程序而导致电脑慢慢变得紊乱不堪。而且还有google提供的安全检测,用起来还是比较放心的。各种各样的插件足以满足你的需要。
    互联网时代,网上购物非常平常,但是经常在淘宝购物还没有拿过返利? 或者返利都要被其它平台拿掉一半? 现在开始自己轻松成为一名淘宝客吧, 不止自己买东西100%返利到自己账户, 还可以把链接发给别人赚取更多返利!轻松淘宝客借助淘宝 API 给你生成一个属于自己的淘宝客网站,然后你通过这个网站购物自然获得返利,而且返利直接进入你的阿里妈妈账户。
    通过这个插件只需要简单配置, 就可以摇身一变变成淘宝客, 在淘宝(taobao.com)和天猫(tmall.com)浏览商品查询当前商品的返利情况, 然后随时通过链接把宝贝推荐到微博, qq等让其它人购买, 赚取100%的返利到自己的淘宝客账户, 无需再通过其它平台周转.平时也可以作为一个快速查询商品返利的工具, 很是方便.

在Chrome Web store中搜索”轻松淘宝客“,选择extensions中既可以找到这个插件,使用的话,可以参考其官网说明。不再赘述。
预览图如下:
轻松淘宝客预览

生存法则之保险

程序员生存法则,其中中华人民共和国社会保险法是每个人生存中必须要懂得的,它能帮你处理危机时刻,解决你的困境,帮你维护自己的权益。

中华人民共和国社会保险法
(2010年10月28日第十一届全国人民代表大会常务委员会第十七次会议通过)
第一章 总 则
第一条 为了规范社会保险关系,维护公民参加社会保险和享受社会保险待遇的合法权益,使公民共享发展成果,促进社会和谐稳定,根据宪法,制定本法。
第二条 国家建立基本养老保险、基本医疗保险、工伤保险、失业保险、生育保险等社会保险制度,保障公民在年老、疾病、工伤、失业、生育等情况下依法从国家和社会获得物质帮助的权利。
第三条 社会保险制度坚持广覆盖、保基本、多层次、可持续的方针,社会保险水平应当与经济社会发展水平相适应。
第四条 中华人民共和国境内的用人单位和个人依法缴纳社会保险费,有权查询缴费记录、个人权益记录,要求社会保险经办机构提供社会保险咨询等相关服务。
个人依法享受社会保险待遇,有权监督本单位为其缴费情况。
第五条 县级以上人民政府将社会保险事业纳入国民经济和社会发展规划。
国家多渠道筹集社会保险资金。县级以上人民政府对社会保险事业给予必要的经费支持。
国家通过税收优惠政策支持社会保险事业。
第六条 国家对社会保险基金实行严格监管。
国务院和省、自治区、直辖市人民政府建立健全社会保险基金监督管理制度,保障社会保险基金安全、有效运行。
县级以上人民政府采取措施,鼓励和支持社会各方面参与社会保险基金的监督。
第七条 国务院社会保险行政部门负责全国的社会保险管理工作,国务院其他有关部门在各自的职责范围内负责有关的社会保险工作。
县级以上地方人民政府社会保险行政部门负责本行政区域的社会保险管理工作,县级以上地方人民政府其他有关部门在各自的职责范围内负责有关的社会保险工作。
第八条 社会保险经办机构提供社会保险服务,负责社会保险登记、个人权益记录、社会保险待遇支付等工作。
第九条 工会依法维护职工的合法权益,有权参与社会保险重大事项的研究,参加社会保险监督委员会,对与职工社会保险权益有关的事项进行监督。
第二章 基本养老保险
第十条 职工应当参加基本养老保险,由用人单位和职工共同缴纳基本养老保险费。
无雇工的个体工商户、未在用人单位参加基本养老保险的非全日制从业人员以及其他灵活就业人员可以参加基本养老保险,由个人缴纳基本养老保险费。
公务员和参照公务员法管理的工作人员养老保险的办法由国务院规定。
第十一条 基本养老保险实行社会统筹与个人账户相结合。
基本养老保险基金由用人单位和个人缴费以及政府补贴等组成。
第十二条 用人单位应当按照国家规定的本单位职工工资总额的比例缴纳基本养老保险费,记入基本养老保险统筹基金。
职工应当按照国家规定的本人工资的比例缴纳基本养老保险费,记入个人账户。
无雇工的个体工商户、未在用人单位参加基本养老保险的非全日制从业人员以及其他灵活就业人员参加基本养老保险的,应当按照国家规定缴纳基本养老保险费,分别记入基本养老保险统筹基金和个人账户。
第十三条 国有企业、事业单位职工参加基本养老保险前,视同缴费年限期间应当缴纳的基本养老保险费由政府承担。
基本养老保险基金出现支付不足时,政府给予补贴。
第十四条 个人账户不得提前支取,记账利率不得低于银行定期存款利率,免征利息税。个人死亡的,个人账户余额可以继承。
第十五条 基本养老金由统筹养老金和个人账户养老金组成。
基本养老金根据个人累计缴费年限、缴费工资、当地职工平均工资、个人账户金额、城镇人口平均预期寿命等因素确定。
第十六条 参加基本养老保险的个人,达到法定退休年龄时累计缴费满十五年的,按月领取基本养老金。
参加基本养老保险的个人,达到法定退休年龄时累计缴费不足十五年的,可以缴费至满十五年,按月领取基本养老金;也可以转入新型农村社会养老保险或者城镇居民社会养老保险,按照国务院规定享受相应的养老保险待遇。
第十七条 参加基本养老保险的个人,因病或者非因工死亡的,其遗属可以领取丧葬补助金和抚恤金;在未达到法定退休年龄时因病或者非因工致残完全丧失劳动能力的,可以领取病残津贴。所需资金从基本养老保险基金中支付。
第十八条 国家建立基本养老金正常调整机制。根据职工平均工资增长、物价上涨情况,适时提高基本养老保险待遇水平。
第十九条 个人跨统筹地区就业的,其基本养老保险关系随本人转移,缴费年限累计计算。个人达到法定退休年龄时,基本养老金分段计算、统一支付。具体办法由国务院规定。
第二十条 国家建立和完善新型农村社会养老保险制度。
新型农村社会养老保险实行个人缴费、集体补助和政府补贴相结合。
第二十一条 新型农村社会养老保险待遇由基础养老金和个人账户养老金组成。
参加新型农村社会养老保险的农村居民,符合国家规定条件的,按月领取新型农村社会养老保险待遇。
第二十二条 国家建立和完善城镇居民社会养老保险制度。
省、自治区、直辖市人民政府根据实际情况,可以将城镇居民社会养老保险和新型农村社会养老保险合并实施。
第三章 基本医疗保险
第二十三条 职工应当参加职工基本医疗保险,由用人单位和职工按照国家规定共同缴纳基本医疗保险费。
无雇工的个体工商户、未在用人单位参加职工基本医疗保险的非全日制从业人员以及其他灵活就业人员可以参加职工基本医疗保险,由个人按照国家规定缴纳基本医疗保险费。
第二十四条 国家建立和完善新型农村合作医疗制度。
新型农村合作医疗的管理办法,由国务院规定。
第二十五条 国家建立和完善城镇居民基本医疗保险制度。
城镇居民基本医疗保险实行个人缴费和政府补贴相结合。
享受最低生活保障的人、丧失劳动能力的残疾人、低收入家庭六十周岁以上的老年人和未成年人等所需个人缴费部分,由政府给予补贴。
第二十六条 职工基本医疗保险、新型农村合作医疗和城镇居民基本医疗保险的待遇标准按照国家规定执行。
第二十七条 参加职工基本医疗保险的个人,达到法定退休年龄时累计缴费达到国家规定年限的,退休后不再缴纳基本医疗保险费,按照国家规定享受基本医疗保险待遇;未达到国家规定年限的,可以缴费至国家规定年限。
第二十八条 符合基本医疗保险药品目录、诊疗项目、医疗服务设施标准以及急诊、抢救的医疗费用,按照国家规定从基本医疗保险基金中支付。
第二十九条 参保人员医疗费用中应当由基本医疗保险基金支付的部分,由社会保险经办机构与医疗机构、药品经营单位直接结算。
社会保险行政部门和卫生行政部门应当建立异地就医医疗费用结算制度,方便参保人员享受基本医疗保险待遇。
第三十条 下列医疗费用不纳入基本医疗保险基金支付范围:
(一)应当从工伤保险基金中支付的;
(二)应当由第三人负担的;
(三)应当由公共卫生负担的;
(四)在境外就医的。
医疗费用依法应当由第三人负担,第三人不支付或者无法确定第三人的,由基本医疗保险基金先行支付。基本医疗保险基金先行支付后,有权向第三人追偿。
第三十一条 社会保险经办机构根据管理服务的需要,可以与医疗机构、药品经营单位签订服务协议,规范医疗服务行为。
医疗机构应当为参保人员提供合理、必要的医疗服务。
第三十二条 个人跨统筹地区就业的,其基本医疗保险关系随本人转移,缴费年限累计计算。
第四章 工伤保险
第三十三条 职工应当参加工伤保险,由用人单位缴纳工伤保险费,职工不缴纳工伤保险费。
第三十四条 国家根据不同行业的工伤风险程度确定行业的差别费率,并根据使用工伤保险基金、工伤发生率等情况在每个行业内确定费率档次。行业差别费率和行业内费率档次由国务院社会保险行政部门制定,报国务院批准后公布施行。
社会保险经办机构根据用人单位使用工伤保险基金、工伤发生率和所属行业费率档次等情况,确定用人单位缴费费率。
第三十五条 用人单位应当按照本单位职工工资总额,根据社会保险经办机构确定的费率缴纳工伤保险费。
第三十六条 职工因工作原因受到事故伤害或者患职业病,且经工伤认定的,享受工伤保险待遇;其中,经劳动能力鉴定丧失劳动能力的,享受伤残待遇。
工伤认定和劳动能力鉴定应当简捷、方便。
第三十七条 职工因下列情形之一导致本人在工作中伤亡的,不认定为工伤:
(一)故意犯罪;
(二)醉酒或者吸毒;
(三)自残或者自杀;
(四)法律、行政法规规定的其他情形。
第三十八条 因工伤发生的下列费用,按照国家规定从工伤保险基金中支付:
(一)治疗工伤的医疗费用和康复费用;
(二)住院伙食补助费;
(三)到统筹地区以外就医的交通食宿费;
(四)安装配置伤残辅助器具所需费用;
(五)生活不能自理的,经劳动能力鉴定委员会确认的生活护理费;
(六)一次性伤残补助金和一至四级伤残职工按月领取的伤残津贴;
(七)终止或者解除劳动合同时,应当享受的一次性医疗补助金;
(八)因工死亡的,其遗属领取的丧葬补助金、供养亲属抚恤金和因工死亡补助金;
(九)劳动能力鉴定费。
第三十九条 因工伤发生的下列费用,按照国家规定由用人单位支付:
(一)治疗工伤期间的工资福利;
(二)五级、六级伤残职工按月领取的伤残津贴;
(三)终止或者解除劳动合同时,应当享受的一次性伤残就业补助金。
第四十条 工伤职工符合领取基本养老金条件的,停发伤残津贴,享受基本养老保险待遇。基本养老保险待遇低于伤残津贴的,从工伤保险基金中补足差额。
第四十一条 职工所在用人单位未依法缴纳工伤保险费,发生工伤事故的,由用人单位支付工伤保险待遇。用人单位不支付的,从工伤保险基金中先行支付。
从工伤保险基金中先行支付的工伤保险待遇应当由用人单位偿还。用人单位不偿还的,社会保险经办机构可以依照本法第六十三条的规定追偿。
第四十二条 由于第三人的原因造成工伤,第三人不支付工伤医疗费用或者无法确定第三人的,由工伤保险基金先行支付。工伤保险基金先行支付后,有权向第三人追偿。
第四十三条 工伤职工有下列情形之一的,停止享受工伤保险待遇:
(一)丧失享受待遇条件的;
(二)拒不接受劳动能力鉴定的;
(三)拒绝治疗的。
第五章 失业保险
第四十四条 职工应当参加失业保险,由用人单位和职工按照国家规定共同缴纳失业保险费。
第四十五条 失业人员符合下列条件的,从失业保险基金中领取失业保险金:
(一)失业前用人单位和本人已经缴纳失业保险费满一年的;
(二)非因本人意愿中断就业的;
(三)已经进行失业登记,并有求职要求的。
第四十六条 失业人员失业前用人单位和本人累计缴费满一年不足五年的,领取失业保险金的期限最长为十二个月;累计缴费满五年不足十年的,领取失业保险金的期限最长为十八个月;累计缴费十年以上的,领取失业保险金的期限最长为二十四个月。重新就业后,再次失业的,缴费时间重新计算,领取失业保险金的期限与前次失业应当领取而尚未领取的失业保险金的期限合并计算,最长不超过二十四个月。
第四十七条 失业保险金的标准,由省、自治区、直辖市人民政府确定,不得低于城市居民最低生活保障标准。
第四十八条 失业人员在领取失业保险金期间,参加职工基本医疗保险,享受基本医疗保险待遇。
失业人员应当缴纳的基本医疗保险费从失业保险基金中支付,个人不缴纳基本医疗保险费。
第四十九条 失业人员在领取失业保险金期间死亡的,参照当地对在职职工死亡的规定,向其遗属发给一次性丧葬补助金和抚恤金。所需资金从失业保险基金中支付。
个人死亡同时符合领取基本养老保险丧葬补助金、工伤保险丧葬补助金和失业保险丧葬补助金条件的,其遗属只能选择领取其中的一项。
第五十条 用人单位应当及时为失业人员出具终止或者解除劳动关系的证明,并将失业人员的名单自终止或者解除劳动关系之日起十五日内告知社会保险经办机构。
失业人员应当持本单位为其出具的终止或者解除劳动关系的证明,及时到指定的公共就业服务机构办理失业登记。
失业人员凭失业登记证明和个人身份证明,到社会保险经办机构办理领取失业保险金的手续。失业保险金领取期限自办理失业登记之日起计算。
第五十一条 失业人员在领取失业保险金期间有下列情形之一的,停止领取失业保险金,并同时停止享受其他失业保险待遇:
(一)重新就业的;
(二)应征服兵役的;
(三)移居境外的;
(四)享受基本养老保险待遇的;
(五)无正当理由,拒不接受当地人民政府指定部门或者机构介绍的适当工作或者提供的培训的。
第五十二条 职工跨统筹地区就业的,其失业保险关系随本人转移,缴费年限累计计算。
第六章 生育保险
第五十三条 职工应当参加生育保险,由用人单位按照国家规定缴纳生育保险费,职工不缴纳生育保险费。
第五十四条 用人单位已经缴纳生育保险费的,其职工享受生育保险待遇;职工未就业配偶按照国家规定享受生育医疗费用待遇。所需资金从生育保险基金中支付。
生育保险待遇包括生育医疗费用和生育津贴。
第五十五条 生育医疗费用包括下列各项:
(一)生育的医疗费用;
(二)计划生育的医疗费用;
(三)法律、法规规定的其他项目费用。
第五十六条 职工有下列情形之一的,可以按照国家规定享受生育津贴:
(一)女职工生育享受产假;
(二)享受计划生育手术休假;
(三)法律、法规规定的其他情形。
生育津贴按照职工所在用人单位上年度职工月平均工资计发。
第七章 社会保险费征缴
第五十七条 用人单位应当自成立之日起三十日内凭营业执照、登记证书或者单位印章,向当地社会保险经办机构申请办理社会保险登记。社会保险经办机构应当自收到申请之日起十五日内予以审核,发给社会保险登记证件。
用人单位的社会保险登记事项发生变更或者用人单位依法终止的,应当自变更或者终止之日起三十日内,到社会保险经办机构办理变更或者注销社会保险登记。
工商行政管理部门、民政部门和机构编制管理机关应当及时向社会保险经办机构通报用人单位的成立、终止情况,公安机关应当及时向社会保险经办机构通报个人的出生、死亡以及户口登记、迁移、注销等情况。
第五十八条 用人单位应当自用工之日起三十日内为其职工向社会保险经办机构申请办理社会保险登记。未办理社会保险登记的,由社会保险经办机构核定其应当缴纳的社会保险费。
自愿参加社会保险的无雇工的个体工商户、未在用人单位参加社会保险的非全日制从业人员以及其他灵活就业人员,应当向社会保险经办机构申请办理社会保险登记。
国家建立全国统一的个人社会保障号码。个人社会保障号码为公民身份号码。
第五十九条 县级以上人民政府加强社会保险费的征收工作。
社会保险费实行统一征收,实施步骤和具体办法由国务院规定。
第六十条 用人单位应当自行申报、按时足额缴纳社会保险费,非因不可抗力等法定事由不得缓缴、减免。职工应当缴纳的社会保险费由用人单位代扣代缴,用人单位应当按月将缴纳社会保险费的明细情况告知本人。
无雇工的个体工商户、未在用人单位参加社会保险的非全日制从业人员以及其他灵活就业人员,可以直接向社会保险费征收机构缴纳社会保险费。
第六十一条 社会保险费征收机构应当依法按时足额征收社会保险费,并将缴费情况定期告知用人单位和个人。
第六十二条 用人单位未按规定申报应当缴纳的社会保险费数额的,按照该单位上月缴费额的百分之一百一十确定应当缴纳数额;缴费单位补办申报手续后,由社会保险费征收机构按照规定结算。
第六十三条 用人单位未按时足额缴纳社会保险费的,由社会保险费征收机构责令其限期缴纳或者补足。
用人单位逾期仍未缴纳或者补足社会保险费的,社会保险费征收机构可以向银行和其他金融机构查询其存款账户;并可以申请县级以上有关行政部门作出划拨社会保险费的决定,书面通知其开户银行或者其他金融机构划拨社会保险费。用人单位账户余额少于应当缴纳的社会保险费的,社会保险费征收机构可以要求该用人单位提供担保,签订延期缴费协议。
用人单位未足额缴纳社会保险费且未提供担保的,社会保险费征收机构可以申请人民法院扣押、查封、拍卖其价值相当于应当缴纳社会保险费的财产,以拍卖所得抵缴社会保险费。
第八章 社会保险基金
第六十四条 社会保险基金包括基本养老保险基金、基本医疗保险基金、工伤保险基金、失业保险基金和生育保险基金。各项社会保险基金按照社会保险险种分别建账,分账核算,执行国家统一的会计制度。
社会保险基金专款专用,任何组织和个人不得侵占或者挪用。
基本养老保险基金逐步实行全国统筹,其他社会保险基金逐步实行省级统筹,具体时间、步骤由国务院规定。
第六十五条 社会保险基金通过预算实现收支平衡。
县级以上人民政府在社会保险基金出现支付不足时,给予补贴。
第六十六条 社会保险基金按照统筹层次设立预算。社会保险基金预算按照社会保险项目分别编制。
第六十七条 社会保险基金预算、决算草案的编制、审核和批准,依照法律和国务院规定执行。
第六十八条 社会保险基金存入财政专户,具体管理办法由国务院规定。
第六十九条 社会保险基金在保证安全的前提下,按照国务院规定投资运营实现保值增值。
社会保险基金不得违规投资运营,不得用于平衡其他政府预算,不得用于兴建、改建办公场所和支付人员经费、运行费用、管理费用,或者违反法律、行政法规规定挪作其他用途。
第七十条 社会保险经办机构应当定期向社会公布参加社会保险情况以及社会保险基金的收入、支出、结余和收益情况。
第七十一条 国家设立全国社会保障基金,由中央财政预算拨款以及国务院批准的其他方式筹集的资金构成,用于社会保障支出的补充、调剂。全国社会保障基金由全国社会保障基金管理运营机构负责管理运营,在保证安全的前提下实现保值增值。
全国社会保障基金应当定期向社会公布收支、管理和投资运营的情况。国务院财政部门、社会保险行政部门、审计机关对全国社会保障基金的收支、管理和投资运营情况实施监督。
第九章 社会保险经办
第七十二条 统筹地区设立社会保险经办机构。社会保险经办机构根据工作需要,经所在地的社会保险行政部门和机构编制管理机关批准,可以在本统筹地区设立分支机构和服务网点。
社会保险经办机构的人员经费和经办社会保险发生的基本运行费用、管理费用,由同级财政按照国家规定予以保障。
第七十三条 社会保险经办机构应当建立健全业务、财务、安全和风险管理制度。
社会保险经办机构应当按时足额支付社会保险待遇。
第七十四条 社会保险经办机构通过业务经办、统计、调查获取社会保险工作所需的数据,有关单位和个人应当及时、如实提供。
社会保险经办机构应当及时为用人单位建立档案,完整、准确地记录参加社会保险的人员、缴费等社会保险数据,妥善保管登记、申报的原始凭证和支付结算的会计凭证。
社会保险经办机构应当及时、完整、准确地记录参加社会保险的个人缴费和用人单位为其缴费,以及享受社会保险待遇等个人权益记录,定期将个人权益记录单免费寄送本人。
用人单位和个人可以免费向社会保险经办机构查询、核对其缴费和享受社会保险待遇记录,要求社会保险经办机构提供社会保险咨询等相关服务。
第七十五条 全国社会保险信息系统按照国家统一规划,由县级以上人民政府按照分级负责的原则共同建设。
第十章 社会保险监督
第七十六条 各级人民代表大会常务委员会听取和审议本级人民政府对社会保险基金的收支、管理、投资运营以及监督检查情况的专项工作报告,组织对本法实施情况的执法检查等,依法行使监督职权。
第七十七条 县级以上人民政府社会保险行政部门应当加强对用人单位和个人遵守社会保险法律、法规情况的监督检查。
社会保险行政部门实施监督检查时,被检查的用人单位和个人应当如实提供与社会保险有关的资料,不得拒绝检查或者谎报、瞒报。
第七十八条 财政部门、审计机关按照各自职责,对社会保险基金的收支、管理和投资运营情况实施监督。
第七十九条 社会保险行政部门对社会保险基金的收支、管理和投资运营情况进行监督检查,发现存在问题的,应当提出整改建议,依法作出处理决定或者向有关行政部门提出处理建议。社会保险基金检查结果应当定期向社会公布。
社会保险行政部门对社会保险基金实施监督检查,有权采取下列措施:
(一)查阅、记录、复制与社会保险基金收支、管理和投资运营相关的资料,对可能被转移、隐匿或者灭失的资料予以封存;
(二)询问与调查事项有关的单位和个人,要求其对与调查事项有关的问题作出说明、提供有关证明材料;
(三)对隐匿、转移、侵占、挪用社会保险基金的行为予以制止并责令改正。
第八十条 统筹地区人民政府成立由用人单位代表、参保人员代表,以及工会代表、专家等组成的社会保险监督委员会,掌握、分析社会保险基金的收支、管理和投资运营情况,对社会保险工作提出咨询意见和建议,实施社会监督。
社会保险经办机构应当定期向社会保险监督委员会汇报社会保险基金的收支、管理和投资运营情况。社会保险监督委员会可以聘请会计师事务所对社会保险基金的收支、管理和投资运营情况进行年度审计和专项审计。审计结果应当向社会公开。
社会保险监督委员会发现社会保险基金收支、管理和投资运营中存在问题的,有权提出改正建议;对社会保险经办机构及其工作人员的违法行为,有权向有关部门提出依法处理建议。
第八十一条 社会保险行政部门和其他有关行政部门、社会保险经办机构、社会保险费征收机构及其工作人员,应当依法为用人单位和个人的信息保密,不得以任何形式泄露。
第八十二条 任何组织或者个人有权对违反社会保险法律、法规的行为进行举报、投诉。
社会保险行政部门、卫生行政部门、社会保险经办机构、社会保险费征收机构和财政部门、审计机关对属于本部门、本机构职责范围的举报、投诉,应当依法处理;对不属于本部门、本机构职责范围的,应当书面通知并移交有权处理的部门、机构处理。有权处理的部门、机构应当及时处理,不得推诿。
第八十三条 用人单位或者个人认为社会保险费征收机构的行为侵害自己合法权益的,可以依法申请行政复议或者提起行政诉讼。
用人单位或者个人对社会保险经办机构不依法办理社会保险登记、核定社会保险费、支付社会保险待遇、办理社会保险转移接续手续或者侵害其他社会保险权益的行为,可以依法申请行政复议或者提起行政诉讼。
个人与所在用人单位发生社会保险争议的,可以依法申请调解、仲裁,提起诉讼。用人单位侵害个人社会保险权益的,个人也可以要求社会保险行政部门或者社会保险费征收机构依法处理。
第十一章 法律责任
第八十四条 用人单位不办理社会保险登记的,由社会保险行政部门责令限期改正;逾期不改正的,对用人单位处应缴社会保险费数额一倍以上三倍以下的罚款,对其直接负责的主管人员和其他直接责任人员处五百元以上三千元以下的罚款。
第八十五条 用人单位拒不出具终止或者解除劳动关系证明的,依照《中华人民共和国劳动合同法》的规定处理。
第八十六条 用人单位未按时足额缴纳社会保险费的,由社会保险费征收机构责令限期缴纳或者补足,并自欠缴之日起,按日加收万分之五的滞纳金;逾期仍不缴纳的,由有关行政部门处欠缴数额一倍以上三倍以下的罚款。
第八十七条 社会保险经办机构以及医疗机构、药品经营单位等社会保险服务机构以欺诈、伪造证明材料或者其他手段骗取社会保险基金支出的,由社会保险行政部门责令退回骗取的社会保险金,处骗取金额二倍以上五倍以下的罚款;属于社会保险服务机构的,解除服务协议;直接负责的主管人员和其他直接责任人员有执业资格的,依法吊销其执业资格。
第八十八条 以欺诈、伪造证明材料或者其他手段骗取社会保险待遇的,由社会保险行政部门责令退回骗取的社会保险金,处骗取金额二倍以上五倍以下的罚款。
第八十九条 社会保险经办机构及其工作人员有下列行为之一的,由社会保险行政部门责令改正;给社会保险基金、用人单位或者个人造成损失的,依法承担赔偿责任;对直接负责的主管人员和其他直接责任人员依法给予处分:
(一)未履行社会保险法定职责的;
(二)未将社会保险基金存入财政专户的;
(三)克扣或者拒不按时支付社会保险待遇的;
(四)丢失或者篡改缴费记录、享受社会保险待遇记录等社会保险数据、个人权益记录的;
(五)有违反社会保险法律、法规的其他行为的。
第九十条 社会保险费征收机构擅自更改社会保险费缴费基数、费率,导致少收或者多收社会保险费的,由有关行政部门责令其追缴应当缴纳的社会保险费或者退还不应当缴纳的社会保险费;对直接负责的主管人员和其他直接责任人员依法给予处分。
第九十一条 违反本法规定,隐匿、转移、侵占、挪用社会保险基金或者违规投资运营的,由社会保险行政部门、财政部门、审计机关责令追回;有违法所得的,没收违法所得;对直接负责的主管人员和其他直接责任人员依法给予处分。
第九十二条 社会保险行政部门和其他有关行政部门、社会保险经办机构、社会保险费征收机构及其工作人员泄露用人单位和个人信息的,对直接负责的主管人员和其他直接责任人员依法给予处分;给用人单位或者个人造成损失的,应当承担赔偿责任。
第九十三条 国家工作人员在社会保险管理、监督工作中滥用职权、玩忽职守、徇私舞弊的,依法给予处分。
第九十四条 违反本法规定,构成犯罪的,依法追究刑事责任。
第十二章 附 则
第九十五条 进城务工的农村居民依照本法规定参加社会保险。
第九十六条 征收农村集体所有的土地,应当足额安排被征地农民的社会保险费,按照国务院规定将被征地农民纳入相应的社会保险制度。
第九十七条 外国人在中国境内就业的,参照本法规定参加社会保险。
第九十八条 本法自2011年7月1日起施行。

js中toFixed方法处理精度问题

在写应用程序的时候会碰到在js中做运算这种要求,
比如说页面中有一个span,span中有一个需要拿到js中运算的数据,比如:

<span id=”price”>12.00</span>
通常在页面中js这样处理:

var price=parseFloat($(“#price”).text());

要求是得到这个数后加上某个值后再显示到前台页面中去,但是这就有问题,如果只是像上面那样操作的话,加上一个值然后显示到页面中,后面的”00″就会丢失,具体怎么操作呢?方法是这样的,加上要加的数值后,然后用下面的方法处理一下:

subTotalPrice.toFixed(2);
像上面一样操作的话就不会丢失后面的”00″了。