关闭tab时 偶尔出现 其内容页没有关闭的情况

回复

X-admin相关两点一线 发起了问题 • 1 人关注 • 0 个回复 • 867 次浏览 • 2018-07-18 14:45 • 来自相关话题

x-admin左侧导航栏如何刷新本首页

回复

X-admin相关我不是你的肖奈 回复了问题 • 1 人关注 • 1 个回复 • 1051 次浏览 • 2018-07-17 14:28 • 来自相关话题

按钮点击事件发送ajax到后台处理如何取消按钮的默认行为,不然result回调函数无法传递过来

X-admin相关资料收集专员 回复了问题 • 2 人关注 • 1 个回复 • 945 次浏览 • 2018-07-14 08:00 • 来自相关话题

关于thinkphp 框架开启路径重写,无法获取Authorization Header

PHP技术交流资料收集专员 发表了文章 • 0 个评论 • 1398 次浏览 • 2018-07-09 19:25 • 来自相关话题

在写接口的过程中,经常需要用到在header 上带 Authorization ,今天遇到在thinkphp框架中获取不到,后来在重写规则里面加多一项解决,记录下:
 
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
</IfModule>最后一项解决thinkphp 框架开启路径重写,无法获取Authorization Header 查看全部
在写接口的过程中,经常需要用到在header 上带 Authorization ,今天遇到在thinkphp框架中获取不到,后来在重写规则里面加多一项解决,记录下:
 
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
</IfModule>
最后一项解决thinkphp 框架开启路径重写,无法获取Authorization Header

X-admin2.0 左侧菜单是循环出来的,但是循环的菜单不能点击

X-admin相关资料收集专员 回复了问题 • 2 人关注 • 1 个回复 • 1115 次浏览 • 2018-07-09 19:23 • 来自相关话题

【人事面试篇】 十八道人事面试题

PHP技术交流资料收集专员 发表了文章 • 0 个评论 • 866 次浏览 • 2018-07-06 09:39 • 来自相关话题

第一题#请你自我介绍一下你自己?
#这道面试题是大家在以后面试过程中会常被问到的,那么我们被问到之后, 该如果回答呢?是说姓名?年龄?还是其他什么一般人回答这个问题往往会进入误区,回答的过于平常,只说姓名、年龄、爱好、工作经验等,但是你们想到没有,其实这些信息你的个人简历上都有,那么面试官还问你干什么?

其实,面试官最希望知道的是求职者能否胜任这份工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但一定要突出积极的个性和做事的能力,说得合情合理企业的面试官才会相信。

企业很重视一个人的礼貌,求职者要尊重面试官,在回答每个问题之后还可以加一句“谢谢”,企业喜欢有礼貌的求职者。切记:回答面试官问题的时候一定要回答的自然,有底气,否则你给面试官留下一个“假”的印象。

第二题#你最大的优点和缺点是什么?#

这个问题是企业面试过程中被问到的概率很大的,因为一个人如果不能认清自己或者了解自己的话,那么他做任何事情都不能端正自己的态度,这样自然而然的无法给企业带来价值,企业还会聘用你吗?

常面试官不希望听到直接回答的优缺点是什么等,例如:我优点很多、我最大的优点就是追求完美,最大的缺点就是优点太多,有的人以为这样回答会显得自己比较出色,但事实上,已经岌岌可危了,或者求职者说自己的缺点是小心眼、爱忌妒人、非常懒、脾气大、工作效率低,这些回答之后,企业是肯定不会录用你的!怎么才能回答出企业面试官想要的答案呢?大家可以结合自己的性格,这么说:沉着冷静、条理清楚、立场坚定、顽强向上、乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在××单位经过一到两年的项目实

战,使我更适合这份工作,企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者。

第三题#谈谈你对公司加班的看法?#

哈哈,被面试官问到这题,你就“中大奖”了!为什么呢?因为十有八九这家公司将来会让你加班哦!不过话又说回来,现在的 IT 行业又有哪个程序员可以朝九晚五上下班而不加班的呢?所以被问到这题,求职者一定要把分寸自己拿捏好了。

实际上好多公司会问这个问题,并不证明一定要加班,只是有时候项目多了要加班,想提前测试你是否愿意为公司奉献。被面试官问到这道题,千千万万不要幼稚地反问面试官:“加班是否有加班费”?这样你是不会被公司录用的,因为我之前说过面试官想提前测试你是否愿意为公司奉献,更何况加班费在如今的 IT 行业的私企中已经不复存在,只有为数不多的公司现在还有。

看到这里,肯定有人就说了,既然这样,那我就回答愿意加班了,你这样回答如果你入职了,公司可能让你往死里加班,谁让你当初愿意加班了,那么回答不愿意加班的话,相信大家已经能猜到后果了,这里我就不多说了。既然这样我们回答愿意不行,不愿意更不行,叫我们如何是好,接下来我就告诉大家在问到这到面试题该如何的回答:如果是工作需要我会义不容辞加班,我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班;或者说如果是工作需要我会义不容辞加班,我现在已经成家,生活上已经稳定,这样更能全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班。这么回答之后,这道题你就顺利的过关了,我说过公司喜欢录用聪明的人!

第四题#你对薪资的要求?#

在这里我提醒大家一下,在大家投递简历的时候,千万别再简历上体现“期望薪资”、“原来薪资”等一些关于薪资明确的数字,如果用一些招聘网站的简历模板时,该项必须要填写的时候,大家可以写“面议”。真正的薪资要是不是你写出来的,是你在面试的时候自己的价值体现,下面就让播妞告诉大家如何在面试的时候如何把自己的价值最大化!

说实话,大家找工作,都希望找个高薪的,那我们如何和公司去谈薪酬呢?如果你对薪酬的要求太低,那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重,公司受用不起。一些公司通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱,他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。如果你自己必须说出具体数目,请不要说一个宽泛的范围,那样你将只能得到最低限度的数字。最好给出一个具体的数字,这样表明你已经对当今的人才市场作了调查,知道像自己这样学历的雇员有什么样的价值。只要你之前技术测试都很顺利,那么谈薪酬的时候就会更有底气,我们可以这么回答:我对工资没有硬性要求,我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会,所以只要条件公平,我则不会计较太多或者说:我受过系统的软件编程的训练,不需要进行大量的培训,而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况和市场标准的水平,给我合理的薪水

第五题#在未来的五年的时间内,你的职业规划是什么?#

所谓不想当将军的士兵不是好士兵,所以大家一定要自强。遇到这样的问题,又该怎么解决呢?这是每一个应聘者都不希望被问到的问题,但是几乎每个人都会被问到,比较多的答案是

“管理者”。但是近几年来,许多公司都已经建立了专门的技术途径。这些工作地位往往被称作“顾问”、“参议技师”或“高级软件工程师”等等。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作。要知道,考官总是喜欢有进取心的应聘者,此时如果说“不知道”,所以你在回答这道题的时候,一定要符合自己实际情况,千万不要大而空,这样面试官会觉得你是一个好高骛远之人,就会使你丧失一个好机会。最普通的回答应该是“我准备在技术领域有所作为,比如**技术上有所突破”或“我希望能按照公司的管理思路发展”。

回答这道题时要注意的事项和第二天的面试题一样(下面往期回顾里面有链接),大家可以这么回答面试官,“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺;或者说“我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题。”

企业面试官问的这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。

第六题#谈谈你的朋友对你的评价是什么?#

其实企业面试官问你这道题,是想从侧面了解一下你的性格及与人相处的问题,那我们该如何去回答呢?
 
大家可以这么回答面试官,“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺;或者说“我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题。”

第七题#你还有什么问题要问吗?#

今天这道面试题是大家面试的时候最后都会被问到的:“你还有什么问题要问吗?”不要小看这道题,一定要回答好了
 
企业面试官问的这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。

第八题#如果我们公司录用了你,但你却在工作后发现根本不适合这个职位,你怎么办?#

这个现象在实际工作中很常见,为什么呢?有句老话:“不当家不知柴米油盐贵”,在你向往这份工作的时候,你往往看到的是这份工作比较好的那一面,而看不到它相反的一面,当你真正投入这份工作的时候,你会感觉理想与现实的差别,会造成你心里极大的落差,从而你会有离职的思想,所以选择一份工作的同时,你一定要明确知道你要在这份工作中得到什么,是否在你的人生规划当中,如果你在面试过程中真的被问到这道题,播妞告诉大家该如何去回答!

在公司工作一段时间之后发现工作不适合自己,一般会有两种情况:

1.如果你确实热爱这个职业,那你就要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;

2.如果你自己觉得这个职业对你来说可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对公司和个人都有好处。

第九题#在完成某项工作时,你认为自己的方式比领导要求的更好,你应该怎么做?#

实际工作中,自己和领导有不同的意见很常见,这个是好事,面试官问这道题是想知道你遇到这种情况你怎么处理,因为如果处理好了,会给公司带来更大的价值,所以你回答好了,面试官这官你应该可以轻松的过了。

1.原则上我会尊重和服从领导的工作安排,同时私底下找机会以请教的口吻,婉转地表达自己的想法,看看领导是否能改变想法。

2.如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作,并私下找领导分析下我的想法有哪些考虑是不周到的,这样也可以去提高自己。

3.还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见,如领导仍固执己见,我会毫不犹豫地再向上级领导反映。(注:这个你可以在面试的时候这么说,但一定要明确是面试官不是你将来的直接主管,而且实际中你也不要这么干!)

第十题#如果你出现工作失误,给公司造成经济损失,你认为该怎么办?#

这个问题是在面试上基本上都会问到的,其实面试官是在考察你是否可以承担责任,所以那我们该如果回答呢?

1.我本意是为公司努力工作,如果造成经济损失,我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责,希望公司帮助解决。

2.分清责任,各负其责,如果是我的责任,我甘愿受罚;如果是一个我负责的团队中的人失误,也不能幸灾乐祸,作为一个团队,需要互相提携共同完成工作,安慰同事并且帮助同事查找原因总结经验。

3.总结经验教训,一个人的一生不可能不犯错误,重要的是能从自己的或者是别人的错误中吸取经验教训,并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够,以致出现了本可以避免的错误。

第十一题#如果你做的一项工作受到上级表扬,主管却说是他做的,你该怎样?#

不要觉得不公平,这样的不公平的事以后你们会遇见有的多,在你不能改变环境的时候,就该适应环境,但是这些虽说是实际情况,面试的时候你千万不能这么去回答,那我们该如何回答呢?

我首先不会找那位上级领导说明这件事,我会主动找我的主管领导来沟通,因为沟通是解决人际关系的最好办法,但结果会有两种:

1.我的主管领导认识到自己的错误,我想我会视具体情况决定是否原谅他。

2.他更加变本加厉的来威胁我,那我会毫不犹豫地找我的上级领导反映此事,因为他这样做会造成负面影响,对今后的工作不利。

第十二题#谈谈你对跳槽的看法?#

这道题,比较简单,大家可以在面试的时候在扩展一下。
1.正常的“跳槽”能促进人才合理流动,应该支持。
2.频繁的跳槽对单位和个人双方都不利,应该反对。
 
第十三题#谈谈工作中你难以和同事、上级相处,你该怎么办?#
现在为人处世可以说是最难学的也是最容易学的一门课程,这个只有在实践
中去学习,遇到这个问题让播妞教你去如何回答!1.我会服从领导的指挥,配合同事的工作。2.我会从自身找原因,仔细分析是不是自己工作做得不好让领导不满意,同事看不惯。还要

看看是不是为人处世方面做得不好,如果是这样的话我会努力改正。3.如果我找不到原因,我会找机会跟他们沟通,请他们指出我的不足,有问题就及时改正。4.作为优秀的员工,应该时刻以大局为重,即使在一段时间内,领导和同事对我不理解,我

也会做好本职工作,虚心向他们学习,我相信,他们会看见我在努力,总有一天会对我微笑的。

第十四题#你因工作比较突出,虽说得到领导肯定,但同事越来越孤立你,你该怎么办?#
播妞给大家总结了一下,可以从四点去说:1.成绩比较突出,得到领导的肯定是件好事情,以后更加努力。

2.检讨一下自己是不是对工作的热心度超过同事间交往的热心了,加强同事间的交往及共同的兴趣爱好。

3.工作中,切勿伤害别人的自尊心。
4.不再领导前拨弄是非。
第十五题#说说你选择这份工作的动机#
其实这道面试题是面试官想知道面试者对这份工作的热忱及理解度,并筛选因一时兴起而来应试的人,那么,我们该怎么回答呢?如果你是在这个领域是无经验者,也可以强调“就算职种不同,也希望有机会发挥之前的经验”,所以你在面试时候一定要对该公司做好备课,往往公司不希望自己的公司成为别人的职业跳板。

第十六题#你能为我们公司带来什么呢?#

面试官往往想知道,你比其他面试者能多带给公司什么,播妞接下来就告诉大家该如何去回答这道题。

企业很想知道未来的员工能为企业做什么,求职者应再次重复自己的优势,然后说:“就我的能力,我可以做一个优秀的员工在组织中发挥能力,给组织带来高效率和更多的收益”。

企业喜欢求职者就申请的职位表明自己的能力,比如申请营销之类的职位,可以说:“我可以开发大量的新客户,同时,对老客户做更全面周到的服务,开发老客户的新需求和消费。”

第十七题#说说喜欢这份工作的哪一点?#

相信其实大家心中一定都有答案了吧!那我们就畅所欲言吧!如果你没有喜欢的,说明你对企业的忠诚度不高,企业自然不会聘用你!

每个人的价值观不同,自然评断的标准也会不同,但是,在回答面试官这个问题时可不能太直接就把自己心理的话说出来,尤其是薪资方面的问题,不过一些无伤大雅的回答是不错的考虑,如交通方便,工作性质及内容颇能符合自己的兴趣等等都是不错的答案,不过如果这时自己能仔细思考出这份工作的与众不同之处,相信在面试上会大大加分。

第十八题#你是怎样看待学历和能力的?#

学历和能力在当今的社会都不可或缺,学历往往是你面试的敲门砖,敲完门用途就不大了,后面才是证明你能力价值的,那我们被问到:“你是怎样看待学历和能力的?”该如何回答呢?

学历我想只要是大学专科的学历,就表明觉得我具备了根本的学习能力。剩下的,你是学士也好,还是博士也好,对于这一点的讨论,不是看你学了多少知识,而是看你在这个领域上发挥了什么,也就是所说的能力问题。一个人工作能力的高低直接决定其职场命运,而学历的高低只是进入一个企业的敲门砖,如果贵公司把学历卡在博士上,我就无法进入贵公司,当然这不一定只是我个人的损失,如果一个专科生都能完成的工作,您又何必非要招聘一位博士生呢? 查看全部
第一题#请你自我介绍一下你自己?
#这道面试题是大家在以后面试过程中会常被问到的,那么我们被问到之后, 该如果回答呢?是说姓名?年龄?还是其他什么一般人回答这个问题往往会进入误区,回答的过于平常,只说姓名、年龄、爱好、工作经验等,但是你们想到没有,其实这些信息你的个人简历上都有,那么面试官还问你干什么?

其实,面试官最希望知道的是求职者能否胜任这份工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但一定要突出积极的个性和做事的能力,说得合情合理企业的面试官才会相信。

企业很重视一个人的礼貌,求职者要尊重面试官,在回答每个问题之后还可以加一句“谢谢”,企业喜欢有礼貌的求职者。切记:回答面试官问题的时候一定要回答的自然,有底气,否则你给面试官留下一个“假”的印象。

第二题#你最大的优点和缺点是什么?#

这个问题是企业面试过程中被问到的概率很大的,因为一个人如果不能认清自己或者了解自己的话,那么他做任何事情都不能端正自己的态度,这样自然而然的无法给企业带来价值,企业还会聘用你吗?

常面试官不希望听到直接回答的优缺点是什么等,例如:我优点很多、我最大的优点就是追求完美,最大的缺点就是优点太多,有的人以为这样回答会显得自己比较出色,但事实上,已经岌岌可危了,或者求职者说自己的缺点是小心眼、爱忌妒人、非常懒、脾气大、工作效率低,这些回答之后,企业是肯定不会录用你的!怎么才能回答出企业面试官想要的答案呢?大家可以结合自己的性格,这么说:沉着冷静、条理清楚、立场坚定、顽强向上、乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在××单位经过一到两年的项目实

战,使我更适合这份工作,企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者。

第三题#谈谈你对公司加班的看法?#

哈哈,被面试官问到这题,你就“中大奖”了!为什么呢?因为十有八九这家公司将来会让你加班哦!不过话又说回来,现在的 IT 行业又有哪个程序员可以朝九晚五上下班而不加班的呢?所以被问到这题,求职者一定要把分寸自己拿捏好了。

实际上好多公司会问这个问题,并不证明一定要加班,只是有时候项目多了要加班,想提前测试你是否愿意为公司奉献。被面试官问到这道题,千千万万不要幼稚地反问面试官:“加班是否有加班费”?这样你是不会被公司录用的,因为我之前说过面试官想提前测试你是否愿意为公司奉献,更何况加班费在如今的 IT 行业的私企中已经不复存在,只有为数不多的公司现在还有。

看到这里,肯定有人就说了,既然这样,那我就回答愿意加班了,你这样回答如果你入职了,公司可能让你往死里加班,谁让你当初愿意加班了,那么回答不愿意加班的话,相信大家已经能猜到后果了,这里我就不多说了。既然这样我们回答愿意不行,不愿意更不行,叫我们如何是好,接下来我就告诉大家在问到这到面试题该如何的回答:如果是工作需要我会义不容辞加班,我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班;或者说如果是工作需要我会义不容辞加班,我现在已经成家,生活上已经稳定,这样更能全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班。这么回答之后,这道题你就顺利的过关了,我说过公司喜欢录用聪明的人!

第四题#你对薪资的要求?#

在这里我提醒大家一下,在大家投递简历的时候,千万别再简历上体现“期望薪资”、“原来薪资”等一些关于薪资明确的数字,如果用一些招聘网站的简历模板时,该项必须要填写的时候,大家可以写“面议”。真正的薪资要是不是你写出来的,是你在面试的时候自己的价值体现,下面就让播妞告诉大家如何在面试的时候如何把自己的价值最大化!

说实话,大家找工作,都希望找个高薪的,那我们如何和公司去谈薪酬呢?如果你对薪酬的要求太低,那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重,公司受用不起。一些公司通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱,他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。如果你自己必须说出具体数目,请不要说一个宽泛的范围,那样你将只能得到最低限度的数字。最好给出一个具体的数字,这样表明你已经对当今的人才市场作了调查,知道像自己这样学历的雇员有什么样的价值。只要你之前技术测试都很顺利,那么谈薪酬的时候就会更有底气,我们可以这么回答:我对工资没有硬性要求,我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会,所以只要条件公平,我则不会计较太多或者说:我受过系统的软件编程的训练,不需要进行大量的培训,而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况和市场标准的水平,给我合理的薪水

第五题#在未来的五年的时间内,你的职业规划是什么?#

所谓不想当将军的士兵不是好士兵,所以大家一定要自强。遇到这样的问题,又该怎么解决呢?这是每一个应聘者都不希望被问到的问题,但是几乎每个人都会被问到,比较多的答案是

“管理者”。但是近几年来,许多公司都已经建立了专门的技术途径。这些工作地位往往被称作“顾问”、“参议技师”或“高级软件工程师”等等。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作。要知道,考官总是喜欢有进取心的应聘者,此时如果说“不知道”,所以你在回答这道题的时候,一定要符合自己实际情况,千万不要大而空,这样面试官会觉得你是一个好高骛远之人,就会使你丧失一个好机会。最普通的回答应该是“我准备在技术领域有所作为,比如**技术上有所突破”或“我希望能按照公司的管理思路发展”。

回答这道题时要注意的事项和第二天的面试题一样(下面往期回顾里面有链接),大家可以这么回答面试官,“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺;或者说“我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题。”

企业面试官问的这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。

第六题#谈谈你的朋友对你的评价是什么?#

其实企业面试官问你这道题,是想从侧面了解一下你的性格及与人相处的问题,那我们该如何去回答呢?
 
大家可以这么回答面试官,“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺;或者说“我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题。”

第七题#你还有什么问题要问吗?#

今天这道面试题是大家面试的时候最后都会被问到的:“你还有什么问题要问吗?”不要小看这道题,一定要回答好了
 
企业面试官问的这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。

第八题#如果我们公司录用了你,但你却在工作后发现根本不适合这个职位,你怎么办?#

这个现象在实际工作中很常见,为什么呢?有句老话:“不当家不知柴米油盐贵”,在你向往这份工作的时候,你往往看到的是这份工作比较好的那一面,而看不到它相反的一面,当你真正投入这份工作的时候,你会感觉理想与现实的差别,会造成你心里极大的落差,从而你会有离职的思想,所以选择一份工作的同时,你一定要明确知道你要在这份工作中得到什么,是否在你的人生规划当中,如果你在面试过程中真的被问到这道题,播妞告诉大家该如何去回答!

在公司工作一段时间之后发现工作不适合自己,一般会有两种情况:

1.如果你确实热爱这个职业,那你就要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;

2.如果你自己觉得这个职业对你来说可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对公司和个人都有好处。

第九题#在完成某项工作时,你认为自己的方式比领导要求的更好,你应该怎么做?#

实际工作中,自己和领导有不同的意见很常见,这个是好事,面试官问这道题是想知道你遇到这种情况你怎么处理,因为如果处理好了,会给公司带来更大的价值,所以你回答好了,面试官这官你应该可以轻松的过了。

1.原则上我会尊重和服从领导的工作安排,同时私底下找机会以请教的口吻,婉转地表达自己的想法,看看领导是否能改变想法。

2.如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作,并私下找领导分析下我的想法有哪些考虑是不周到的,这样也可以去提高自己。

3.还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见,如领导仍固执己见,我会毫不犹豫地再向上级领导反映。(注:这个你可以在面试的时候这么说,但一定要明确是面试官不是你将来的直接主管,而且实际中你也不要这么干!)

第十题#如果你出现工作失误,给公司造成经济损失,你认为该怎么办?#

这个问题是在面试上基本上都会问到的,其实面试官是在考察你是否可以承担责任,所以那我们该如果回答呢?

1.我本意是为公司努力工作,如果造成经济损失,我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责,希望公司帮助解决。

2.分清责任,各负其责,如果是我的责任,我甘愿受罚;如果是一个我负责的团队中的人失误,也不能幸灾乐祸,作为一个团队,需要互相提携共同完成工作,安慰同事并且帮助同事查找原因总结经验。

3.总结经验教训,一个人的一生不可能不犯错误,重要的是能从自己的或者是别人的错误中吸取经验教训,并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够,以致出现了本可以避免的错误。

第十一题#如果你做的一项工作受到上级表扬,主管却说是他做的,你该怎样?#

不要觉得不公平,这样的不公平的事以后你们会遇见有的多,在你不能改变环境的时候,就该适应环境,但是这些虽说是实际情况,面试的时候你千万不能这么去回答,那我们该如何回答呢?

我首先不会找那位上级领导说明这件事,我会主动找我的主管领导来沟通,因为沟通是解决人际关系的最好办法,但结果会有两种:

1.我的主管领导认识到自己的错误,我想我会视具体情况决定是否原谅他。

2.他更加变本加厉的来威胁我,那我会毫不犹豫地找我的上级领导反映此事,因为他这样做会造成负面影响,对今后的工作不利。

第十二题#谈谈你对跳槽的看法?#

这道题,比较简单,大家可以在面试的时候在扩展一下。
1.正常的“跳槽”能促进人才合理流动,应该支持。
2.频繁的跳槽对单位和个人双方都不利,应该反对。
 
第十三题#谈谈工作中你难以和同事、上级相处,你该怎么办?#
现在为人处世可以说是最难学的也是最容易学的一门课程,这个只有在实践
中去学习,遇到这个问题让播妞教你去如何回答!1.我会服从领导的指挥,配合同事的工作。2.我会从自身找原因,仔细分析是不是自己工作做得不好让领导不满意,同事看不惯。还要

看看是不是为人处世方面做得不好,如果是这样的话我会努力改正。3.如果我找不到原因,我会找机会跟他们沟通,请他们指出我的不足,有问题就及时改正。4.作为优秀的员工,应该时刻以大局为重,即使在一段时间内,领导和同事对我不理解,我

也会做好本职工作,虚心向他们学习,我相信,他们会看见我在努力,总有一天会对我微笑的。

第十四题#你因工作比较突出,虽说得到领导肯定,但同事越来越孤立你,你该怎么办?#
播妞给大家总结了一下,可以从四点去说:1.成绩比较突出,得到领导的肯定是件好事情,以后更加努力。

2.检讨一下自己是不是对工作的热心度超过同事间交往的热心了,加强同事间的交往及共同的兴趣爱好。

3.工作中,切勿伤害别人的自尊心。
4.不再领导前拨弄是非。
第十五题#说说你选择这份工作的动机#
其实这道面试题是面试官想知道面试者对这份工作的热忱及理解度,并筛选因一时兴起而来应试的人,那么,我们该怎么回答呢?如果你是在这个领域是无经验者,也可以强调“就算职种不同,也希望有机会发挥之前的经验”,所以你在面试时候一定要对该公司做好备课,往往公司不希望自己的公司成为别人的职业跳板。

第十六题#你能为我们公司带来什么呢?#

面试官往往想知道,你比其他面试者能多带给公司什么,播妞接下来就告诉大家该如何去回答这道题。

企业很想知道未来的员工能为企业做什么,求职者应再次重复自己的优势,然后说:“就我的能力,我可以做一个优秀的员工在组织中发挥能力,给组织带来高效率和更多的收益”。

企业喜欢求职者就申请的职位表明自己的能力,比如申请营销之类的职位,可以说:“我可以开发大量的新客户,同时,对老客户做更全面周到的服务,开发老客户的新需求和消费。”

第十七题#说说喜欢这份工作的哪一点?#

相信其实大家心中一定都有答案了吧!那我们就畅所欲言吧!如果你没有喜欢的,说明你对企业的忠诚度不高,企业自然不会聘用你!

每个人的价值观不同,自然评断的标准也会不同,但是,在回答面试官这个问题时可不能太直接就把自己心理的话说出来,尤其是薪资方面的问题,不过一些无伤大雅的回答是不错的考虑,如交通方便,工作性质及内容颇能符合自己的兴趣等等都是不错的答案,不过如果这时自己能仔细思考出这份工作的与众不同之处,相信在面试上会大大加分。

第十八题#你是怎样看待学历和能力的?#

学历和能力在当今的社会都不可或缺,学历往往是你面试的敲门砖,敲完门用途就不大了,后面才是证明你能力价值的,那我们被问到:“你是怎样看待学历和能力的?”该如何回答呢?

学历我想只要是大学专科的学历,就表明觉得我具备了根本的学习能力。剩下的,你是学士也好,还是博士也好,对于这一点的讨论,不是看你学了多少知识,而是看你在这个领域上发挥了什么,也就是所说的能力问题。一个人工作能力的高低直接决定其职场命运,而学历的高低只是进入一个企业的敲门砖,如果贵公司把学历卡在博士上,我就无法进入贵公司,当然这不一定只是我个人的损失,如果一个专科生都能完成的工作,您又何必非要招聘一位博士生呢?

请问x-admin有没有图片上传的方法呢

X-admin相关资料收集专员 回复了问题 • 2 人关注 • 1 个回复 • 1269 次浏览 • 2018-07-04 09:56 • 来自相关话题

2.0版本如何点击左侧导航 刷新右侧tab

X-admin相关leezhen 回复了问题 • 2 人关注 • 2 个回复 • 1144 次浏览 • 2018-07-04 09:54 • 来自相关话题

字符编码:Unicode和UTF-8之间的关系

PHP技术交流资料收集专员 发表了文章 • 0 个评论 • 381 次浏览 • 2018-06-28 10:11 • 来自相关话题

Unicode和UTF-8之间的关系

1. ASCII码

我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

ASCII码一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

2、非ASCII编码

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。

但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段。

至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。

中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的。

3.Unicode

正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字"严"。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。

4. Unicode的问题

需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如,汉字"严"的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别Unicode和ASCII?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果Unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

它们造成的结果是:1)出现了Unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示Unicode。2)Unicode在很长一段时间内无法推广,直到互联网的出现。

5.UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16(字符用两个字节或四个字节表示)和UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

下表总结了编码规则,字母x表示可用编码的位。

Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

下面,还是以汉字"严"为例,演示如何实现UTF-8编码。

已知"严"的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,"严"的UTF-8编码是"11100100 10111000 10100101",转换成十六进制就是E4B8A5。

6. Unicode与UTF-8之间的转换

通过上一节的例子,可以看到"严"的Unicode码是4E25,UTF-8编码是E4B8A5,两者是不一样的。它们之间的转换可以通过程序实现。

在Windows平台下,有一个最简单的转化方法,就是使用内置的记事本小程序Notepad.exe。打开文件后,点击"文件"菜单中的"另存为"命令,会跳出一个对话框,在最底部有一个"编码"的下拉条。

里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。

1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。

2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。

3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。

4)UTF-8编码,也就是上一节谈到的编码方法。

选择完"编码方式"后,点击"保存"按钮,文件的编码方式就立刻转换好了。

7. Little endian和Big endian

上一节已经提到,Unicode码可以采用UCS-2格式直接存储。以汉字"严"为例,Unicode码是4E25,需要用两个字节存储,一个字节是4E,另一个字节是25。存储的时候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。

这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。

因此,第一个字节在前,就是"大头方式"(Big endian),第二个字节在前就是"小头方式"(Little endian)。

那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。

如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

8. 实例

下面,举一个实例。

打开"记事本"程序Notepad.exe,新建一个文本文件,内容就是一个"严"字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。

然后,用文本编辑软件UltraEdit中的"十六进制功能",观察该文件的内部编码方式。

1)ANSI:文件的编码就是两个字节"D1 CF",这正是"严"的GB2312编码,这也暗示GB2312是采用大头方式存储的。

2)Unicode:编码是四个字节"FF FE 25 4E",其中"FF FE"表明是小头方式存储,真正的编码是4E25。

3)Unicode big endian:编码是四个字节"FE FF 4E 25",其中"FE FF"表明是大头方式存储。

4)UTF-8:编码是六个字节"EF BB BF E4 B8 A5",前三个字节"EF BB BF"表示这是UTF-8编码,后三个"E4B8A5"就是"严"的具体编码,它的存储顺序与编码顺序是一致的。

9. 延伸阅读

* The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets(关于字符集的最基本知识)

* 谈谈Unicode编码
* RFC3629:UTF-8, a transformation format of ISO 10646(如果实现UTF-8的规定) 查看全部
Unicode和UTF-8之间的关系

1. ASCII码

我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

ASCII码一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

2、非ASCII编码

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。

但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段。

至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。

中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的。

3.Unicode

正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字"严"。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。

4. Unicode的问题

需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如,汉字"严"的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别Unicode和ASCII?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果Unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

它们造成的结果是:1)出现了Unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示Unicode。2)Unicode在很长一段时间内无法推广,直到互联网的出现。

5.UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16(字符用两个字节或四个字节表示)和UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

下表总结了编码规则,字母x表示可用编码的位。

Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

下面,还是以汉字"严"为例,演示如何实现UTF-8编码。

已知"严"的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,"严"的UTF-8编码是"11100100 10111000 10100101",转换成十六进制就是E4B8A5。

6. Unicode与UTF-8之间的转换

通过上一节的例子,可以看到"严"的Unicode码是4E25,UTF-8编码是E4B8A5,两者是不一样的。它们之间的转换可以通过程序实现。

在Windows平台下,有一个最简单的转化方法,就是使用内置的记事本小程序Notepad.exe。打开文件后,点击"文件"菜单中的"另存为"命令,会跳出一个对话框,在最底部有一个"编码"的下拉条。

里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。

1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。

2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。

3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。

4)UTF-8编码,也就是上一节谈到的编码方法。

选择完"编码方式"后,点击"保存"按钮,文件的编码方式就立刻转换好了。

7. Little endian和Big endian

上一节已经提到,Unicode码可以采用UCS-2格式直接存储。以汉字"严"为例,Unicode码是4E25,需要用两个字节存储,一个字节是4E,另一个字节是25。存储的时候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。

这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。

因此,第一个字节在前,就是"大头方式"(Big endian),第二个字节在前就是"小头方式"(Little endian)。

那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。

如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

8. 实例

下面,举一个实例。

打开"记事本"程序Notepad.exe,新建一个文本文件,内容就是一个"严"字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。

然后,用文本编辑软件UltraEdit中的"十六进制功能",观察该文件的内部编码方式。

1)ANSI:文件的编码就是两个字节"D1 CF",这正是"严"的GB2312编码,这也暗示GB2312是采用大头方式存储的。

2)Unicode:编码是四个字节"FF FE 25 4E",其中"FF FE"表明是小头方式存储,真正的编码是4E25。

3)Unicode big endian:编码是四个字节"FE FF 4E 25",其中"FE FF"表明是大头方式存储。

4)UTF-8:编码是六个字节"EF BB BF E4 B8 A5",前三个字节"EF BB BF"表示这是UTF-8编码,后三个"E4B8A5"就是"严"的具体编码,它的存储顺序与编码顺序是一致的。

9. 延伸阅读

* The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets(关于字符集的最基本知识)

* 谈谈Unicode编码
  1. * RFC3629:UTF-8, a transformation format of ISO 10646(如果实现UTF-8的规定)