家的感觉

一觉醒来,下午的阳光伴随着稀疏的树影照进朝南的大主卧,脑袋昏昏沉沉的,温度暖暖的,我半睁着眼睛,慵懒的在大床上翻了个身,享受这这难得的什么都不用担心,无比安心的时光。

这种感觉何其的熟悉又遥远,仿佛时间又回到了十多年前,那个周末的下午,同样的我在同样的地方,一觉醒来,满满的幸福。

这是我的家,我的老家,一个20年的家。这个房子所在的小区现在已经破旧不堪,小区是县城里最早的四层小楼,父亲单位的家属楼,没有围墙,粉红色的外墙颜色已经脱落,门口道路两旁长满了杂草。家里已经10年的装修也快撑不住了,木板都已经开胶。不过,这一切都是温馨的。这是一个快30岁的人的感觉,15岁的时候我敢肯定是没有这样的感觉的,因为有了15年的经历,也有了记忆的铺垫。

那时候的爸妈还年轻漂亮,那时候的奶奶身体不错,他们是我的整个世界。我真想这一觉我穿越回去了。

我想这就是家的感觉吧,这就是在家里最好的感觉,是家给你的别的特殊的感觉。即使我在北京买了自己的房子,也从来没有过这样的感觉,因为总怕一觉睡的太多,因为有太多的事情等着我去做,因为时间不太够用。周一到周五是工作时间,周末是各种琐碎的事情。仿佛事情从来就是无止无休的,旧的没完,新的又来。很多时候,我都定义生活就是累着、活着。

直到回到家,我才认识到,谁不累呢,爸妈这个年纪了,更累。

直到回到家,我才感觉到,不累,怎么发现的了,这个家的美好。

阅读更多

长见识了:《遥远的救世主》

首先感谢姜同学给我推荐的此书《遥远的救世主》,我也向大家推荐此书。

这本书我连续读了两整遍。

第一遍是快速阅读,书中很多地方没看懂,而且也没记住多少。只是感觉看完了有一种难以名状的震撼。

第二遍看的稍微仔细了一点,虽然依旧有很多地方不太懂,但是心情稍微平静了些许。

这本书的主题很宏大,大到一个民族的“文化属性”,一个社会的意识形态,一个国家的道德、法律、经济。但是这本书又从一个村子、十几个人的工作生活讲起。故事引人入胜又发人深省,我想这就是一本好书的标准吧。

之前我从来没有思考过这样宏大的问题,也没有能力从这么高的高度去思考问题。如果不是看这本书,可能我永远不会有这个机会去知道这样的问题对亿万人的影响有多么大,也就不能深刻理解民族层面的文化和国家层面的经济与普通民众之间是怎么发生关系的。

就像书里比喻的,我就像是一只井底的蛙,偶然的机会,爬到了井边,看了一眼外面的世界。

一点杂乱的想法,供大家批评指正:

1、丁元英如此奇才的人,全书也只有小丹才能有同样的高度。他们两个的思想高度,周围的人需要高山仰止。元英犹如冷峻的雪山,高耸挺拔,令人望而却步。小丹犹如开满绿树的高山,巍峨雄壮,滋养万物而不动摇。两个人在交往的过程中,都是相互促进,相互影响,相互提高的,我甚至觉得,可能元英因为小丹得到的更多。

2、小丹要的礼物,元英给的礼物,这可是大礼物,怪不得韩总在五台山倒吸一口凉气。与其说这个礼物是给小丹的,不如说这个礼物是给这个国家的、给这个民族的、给这个社会的。

3、肖亚文是最大的赢家,有能力有魄力,但是总是感觉这个配角太配角了,有点精明,不太像是一个有血有肉的女人。而且最开始她这么说我不太理解:是魔、是鬼都可以,就是不是人。他跟人的思维颠倒了,不是人的思维。一旦动了心就算把地狱之门打开了。以肖亚文看透事物本质的能力,不该说出这样的话,不是作者有意吸引读者,就是作者塑造的肖亚文这个形象是变化的。

4、谁能跟我说一下,一个人精通儒道释和基督经典,是怎样一种体验。我是理解不了书中如此多的关于儒道释神的内容,不敢妄加评论。如果作者真的有如此高的成就,那我就更佩服了。

5、其实丁元英的神话,一点都不容易做到,作者拿格律诗这个例子稍微有点牵强,小丹觉得丁元英只不过是按照规律办事,感叹让人做到实事求是很难。其实,换做任何一个人都做不到,只有丁元英能做到。为什么?因为丁元英的智商、丁元英的眼界、丁元英的经验、丁元英的奋斗、丁元英的机遇、丁元英的人脉,别人没有,这是他三十年的积累,才能想出来的点子。别人想做到“按规律办事”都难,即使知道了规律是什么,没有以上种种也成不了神话。举个例子,冯世杰,假使他会时间倒流,没有丁元英,冯即使经历过一遍历史,也未必能重新演绎。

但是我是不反对本书的主旨的。(主旨是不是:从来没有什么救世主,全靠我们自己^_^)

凌乱的书摘:

1、《自嘲》

本是后山人,
偶坐前堂客;
醉舞经阁半卷书,
坐井说天阔。

大志戏功名,
海斗量福祸。
论到囊中羞涩时,
怒指乾坤错。

2、丁元英说:“如果是骆驼穿针的天堂,我敬仰他们,因为我做不到”

3、一个民族最强调道德的时候,正是这个民族道德最沦丧的时候。

阅读更多

Java中文编解码研究

先说编码(encode)

所谓的汉字编码,就是将一个个汉字,翻译成一个个字节(byte),进一步讲,是将一个字符串(String、char),转换成字节数组(byte[])。字节数组其实在各种编程语言中,用的地方还挺多,主要用在I/O方面。我们常说的二进制数据,在Java中,基本上可以等同于字节数组。所以,不论是序列化、文件操作、网络传输二进制流、输入输出二进制流,都会用到字节数组。

再通俗一点讲,汉字编码就是将一个汉字字符翻译成机器能识别的二进制数据。(非汉字同理)

主流的编码方式如下:

ASCII 码
学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符,可以通过键盘输入并且能够显示出来。

ISO-8859-1
128 个字符显然是不够用的,于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵盖了大多数西欧语言字符,所有应用的最广泛。ISO-8859-1 仍然是单字节编码,它总共能表示 256 个字符。

GB2312
它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字。

GBK
全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。

GB18030
全称是《信息交换用汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与 GB2312 编码兼容,这个虽然是国家标准,但是实际应用系统中使用的并不广泛。

UTF-16
说到 UTF 必须要提到 Unicode(Universal Code 统一码),ISO 试图想创建一个全新的超语言字典,世界上所有的语言都可以通过这本字典来相互翻译。可想而知这个字典是多么的复杂,关于 Unicode 的详细规范可以参考相应文档。Unicode 是 Java 和 XML 的基础,下面详细介绍 Unicode 在计算机中的存储形式。

UTF-16 具体定义了 Unicode 字符在计算机中存取方法。UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是 16 个 bit,所以叫 UTF-16。UTF-16 表示字符非常方便,每两个字节表示一个字符,这个在字符串操作时就大大简化了操作,这也是 Java 以 UTF-16 作为内存的字符存储格式的一个很重要的原因。(只能说绝大多数情况下是这样,后面有说明)

UTF-8
UTF-16 统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍,在现在的网络带宽还非常有限的今天,这样会增大网络传输的流量,而且也没必要。而 UTF-8 采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成。

UTF-8 有以下编码规则:

如果一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 – 7F)。可见,所有 ASCII 编码已经是 UTF-8 了。
如果一个字节,以 11 开头,连续的 1 的个数暗示这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。
如果一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节

要了解Unicode就要了解UCS-2/UCS-4,还要了解BOM(Byte Order Mark)和BE/LE(Big Endian/Little Endian)。详细内容可读(http://blog.charlee.li/unicode-intro/)我这里只说一下结论吧:Unicode和UCS-2/UCS-4只是规定了字符用那些字节表示。UTF-8/UTF-16以及BOM才决定了字符在内存中真正的存储方式,真正的用什么样的字节存储,当然真正存储的时候,是需要根据UCS-2或UCS-4计算出的。

严格来说:UTF-16和UTF-8都是变长的,UTF-32才是定长的,UTF-16并不总是两个字节表示一个字符,UTF-16还可以表示UCS-4标准的字符,那个时候占用4字节,但是这一点基本上在开发中被忽略了,基本也可以被忽略。UTF-32之所以是4字节定长,是因为它完全用来表示UCS-4。

小插曲:四个“龍”字以田字形布局组成的一个汉字大家都没见过吧,但是确实在Unicode中有这个字,他用UTF-16存储就是4个字节。

我们常用的汉字,UTF-8是三字节,常用的英文字符,UTF-8是一字节。我们常用的汉字和英文字符,UTF-16都是双字节。所以UTF-8不一定比UTF-16省空间和流量,UTF-8比UTF-16更适合于网络传输的原因是,当丢失单个字节时,不会引起连锁的解码错误,而UTF-16丢失一个字节后,丢失位之后的所有字节解码都会出错。但是UTF-16占用空间更少,易于处理,所以UTF-16一般作为内存存储的编码方式。

再讲解码(decode)

解码是编码的反操作。如果说编码是将地球文字翻译成太阳文字,解码就是将太阳文字翻译成地球文字。

实际上,解码是将字节数组(byte[])按照源编码格式,翻译成汉字,或者翻译成另外一种编码格式的过程。

1、在编辑器中,如果你正在写一个.java文件,你点了保存或者Ctrl+S,这个内存中的java文件就要落地到磁盘上,这时候,系统必须要以一种编码格式对这个.java文件中的所有字符进行编码,才能翻译成二进制保存到磁盘上。

咱们编程都是英文编的,一般用任何编码方式都没什么问题。但如果你有一个变量String s=”一段中文”,这四个中文字符的存在,对文件编码格式提出了要求,可能会引起乱码。

默认情况下,保存是以操作系统的默认编码保存,一般中文操作系统是GBK。

(像notepad,可以保存成UTF-8,但是一定要保存成无BOM格式。)

理论上,java源文件,可以保存成任何编码格式,当然,如果有中文,这种格式必须支持中文,比如保存成GB2312\GBK\UTF-8\UTF-16都没有问题。

2、编译的时候。

用javac编译,是将.java文件的内容取出来,编译成.class文件。所以编译的时候,编译器得知道我之前.java文件是用那种编码方式进行的编码,如果不知道,取(解码)的时候,可就乱套了。我们可以运行一下javac -help命令,其中有一个参数-encoding就是干这件事的,官方解释是:指定源文件使用的字符编码。

如果不指定,则默认使用操作系统编码,一般中文操作系统是GBK。现在我们一般编程的时候,都会指定源码为UTF-8格式,用javac直接编译就会报错,错误提示一般是“编码GBK不可映射字符”或者“未结束的字符串面值”。那为什么我们一般很少遇到这种情况的,因为eclipse中,编译时的编码格式与文件格式一致,所以不会出现问题。这就是IDE为我们做的工作。

按照指定的源字符编码对二进制数据进行解码,这里解码后,不是用来输出,是马上用Unicode编码进行编码。Java编译的字节码文件,也就是.class文件中,所有的字符都是Unicode编码(实际是UTF-8)。这样,所有字节码文件就有了统一的,可支持全球语言的文件。

3、内存中

JVM加载.class文件的时候,就以Unicode编码方式加载就好了,汉字在内存里也是unicode方式存储的。这里实际是用UTF-16,估计是因为Java中的char数据类型都是双字节的吧。

实际上,char数据类型,在JVM中的标准就是UTF-16(无BOM)。String类型的实际存储是UTF-16BE。

4、使用时

无论我们是读取磁盘上的文件,还是读取网络传过来的数据流,我们必须知道他们正确的格式。并给我们的程序指定具体的解码类型。比如我有一个GB2312保存的本地文件,我用JAVA程序去读取里面的内容,起码我就得知道我应该用GB2312去解码,然后JVM会将解码后的字符串,转换成Unicode(UTF-16)。

当我们不知道源文件或源字符编码格式时,最好不要手动解码再编码,很有可能这个过程再也不可逆了。乱码了再也退不回的情况,我们在保存文件的时候经常遇到。(撤销操作另外,这里指再保存回原来格式的文本文件,乱码依然存在或者更严重)

5、JavaWeb开发时

说了这么多基础的知识,真到JavaWeb开发的时候,用到的可能性不大,除非是真的解决不了的编码问题,可以思考原理。

JavaWeb开发中一般需要注意的地方有这么几个:

所有的Java、JSP、XML等源文件都用UTF-8格式保存。
XML文件头行设置< ?xml version="1.0" encoding="UTF-8">
JSP设置编码格式< %@page contentType="text\html; charset=UTF-8"%>
HTML中加入
用框架的话设置框架的编码方式为UTF-8
获取表单参数之前调用request.setCharacterEncoding(“UTF-8″)
设置中间件(如Tomcat)Connector的URIEncoding=”UTF-8”
一般设置前四项都不会有问题。

阅读更多

老歌

跟绝大多数人一样,我喜欢听歌。

跟一部分人一样,我特别喜欢听老歌,特别是八九十年代的歌曲。

有人说,不是我们喜欢听老歌,是我们喜欢听的歌老了。

有人说,喜欢听老歌,是因为我们接受新事物的能力下降了。

也有人说,是因为那些歌曲优秀的本质,使得他们能被流传。

他们说的都有道理,也可能都是我现在越来越喜欢老歌的理由之一。

但是对于我来说,最重要的是,她们的旋律一响起,我总能响起我的童年。我父亲是他们那一辈的长子,我出生的较早,我小时候,姑姑叔叔都很年轻,也都很宠着我。到现在也是都很让着我。所以我的童年很美好。那时候,他们听的,就是这些现在的经典歌曲,我也是跟着听过来的。

童年我住在镇上,家里开了个小饭馆,包间里面有类似现在KTV的唱歌功能,一个电视,两个音箱,还有功放、CD机,歌曲是通过放CD唱片播放的,吃着饭,喝着酒,唱着歌。现在没有这样的了,这就是那时候的时尚。一听老歌,我就想起小时候的小饭馆,想起那些天天听的歌曲。想起我的最爱:焖饼。想起我一个小孩吃比一个大人吃的多的焖饼时,父母和奶奶也不管我,只是疼爱的说我两句的场景。没过多久,我就跟吹气球似的变成了一个小胖墩。还好现在瘦下来了。

还有一点,听老歌,不仅是听,仿佛我还能闻到老歌的味道,感受老歌的灵魂,那些歌听起来感情是那么的饱满。那些歌,或甜蜜、或悲伤、或愉快就仿佛在跟我们将故事。声音也特别的干净。也不全是爱啊、情啊什么的。像走四方、鲁冰花、冰糖葫芦、中华民谣等老歌。书记每次去KTV都唱的《不能这样活》我也很喜欢。情歌也特别好:弯弯的月亮、潮湿的心等太多了不说了。我最喜欢的还是含笑老师唱的《飞天》。

飞天

作词:席时俊

作曲:万军

原唱:含笑

如果沧海枯了,还有一滴泪

那也是为你空等的 一千个轮回

蓦然回首中 斩不断的牵牵绊绊

你所有的骄傲 只能在画里飞

大漠那落日下 吹萧的人是谁

任岁月剥去红装 无奈伤痕累累

荒凉的古堡中 谁在反弹着琵琶

只等我来去匆匆 今生的相会

烟花 烟花 漫天飞 你为谁妩媚

不过是醉眼看花 花也醉

流沙 流沙 漫天飞 谁为你憔悴

不过是缘来缘散 缘如水

烟花 烟花 漫天飞 你为谁妩媚

不过是醉眼看花 花也醉

流沙 流沙 漫天飞 谁为你憔悴

不过是缘来缘散 缘如水

大漠那落日下 吹萧的人是谁

任岁月剥去红装 无奈伤痕累累

荒凉的古堡中 谁在反弹着琵琶

只等我来去匆匆 今生的相会

烟花 烟花 漫天飞 你为谁妩媚

不过是醉眼看花 花也醉

流沙 流沙 漫天飞 谁为你憔悴

不过是缘来缘散 缘如水

烟花 烟花 漫天飞 你为谁妩媚

不过是醉眼看花 花也醉

流沙 流沙 漫天飞 谁为你憔悴

不过是缘来缘散 缘如水

烟花 烟花 漫天飞 你为谁妩媚

不过是醉眼看花 花也醉

流沙 流沙 漫天飞 谁为你憔悴

不过是缘来缘散 缘如水

最近几年创作的歌曲,真的很少有能让我有类似的感觉。但是我不会评论不好,再过多少年,他们也会变成很多人耳朵里的“经典老歌”。

老歌,百听不厌。

阅读更多

Struts2中action的result跳转到另一个action时用param传参乱码问题

一般情况下,我们访问一个Action,返回一个success,展示一个JSP页面。用的方法是:

/WEB-INF/pages/login.jsp

这里result标签的type属性默认是dispatcher。正如官网所说:

If a type attribute is not specified, the framework will use the default dispatcher type, which forwards to another web resource. If the resource is a JavaServer Page, then the container will render it, using its JSP engine.

其实标签有很多配置项可配置,如果我们想实现某个功能,或者解决某个问题,很有可能struts2已经想到了。

我有一个需求:一个Action当返回结果是error时,跳转到另一个Action(1、改变URL。2、为了SiteMesh对两个Action有不同的装饰需求),并且还传一个message进去。按照网友一般的办法,这样是极好的,并且没有乱码的:

login.action

${message}

但是不知道为啥,我的message接受过来,始终是乱码。后来经过一番查找和实验,发现Tomcat默认编码方式不是我的UTF-8,是ISO-8859-1。这样修改一下:

问题解决。

当然,常规的避免乱码的方式都得有。网上一大堆,就不介绍了。

阅读更多

  • © 2015 知研片语
  • 京ICP备16042882号