MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 大家来讨论一下unicode和utf-8解决方案

大家来讨论一下unicode和utf-8解决方案(2)

www.MyException.Cn  网友分享于:2013-01-20  浏览:81次

------解决方案--------------------
学习
------解决方案--------------------
没深入地/./.
学习
------解决方案--------------------
谢谢
------解决方案--------------------
文件 ->servlet -> 浏览器,这中间发生了很多转换?楼主能给讲讲吗?~或者提供点资料,链接什么的?
------解决方案--------------------
我一般就用GB2312,用别的怕出乱码
------解决方案--------------------
学习
------解决方案--------------------

------解决方案--------------------
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
------解决方案--------------------
问题1,2,楼主理解基本正确。

问题3:
Windows/Linux 是Big Endian
Unix 是Little Endian
------解决方案--------------------
探讨
Unicode包含了超过十万个字符, 而Java语言就是用UTF-16格式将字符存储在内存中的,于是我的问题又来了:
java中定义char最大为65535, 那又怎么能说明Unicode包含了超过十万个字符呢?

------解决方案--------------------
我对unicode编码的理解是这样:unicode编码采用32位来表示一个字符,所以几乎可以表示世界上现有的所有
语种的所有文字符号。这样的好处是显而易见的,若大家都用这个编码的话,就没有今天让我们烦人的乱码
问题了。但是这样是有代价的就是存控件浪费严重.为了节省空间于是大家对unicode进行了扩展于是有了
utf-8,utf-16,utf-32
utf按unicode方式查找字符,后面的数字代表默认采用几个字符来存储字符的码表序号,一个字符存不下就
扩展为两个,两个存不下用4个.
所以对只有英文字母组成的问价来说用utf-8编码和用assi编码是一样的,因为没有需要采用扩展存储的符号。
如果采用utf-16编码的话即使你的文章中全部是英文,每个英文也必须用两个字节来存储,

------解决方案--------------------
utf-8 不是为了节约空间,反而会比Unicode浪费空间(Unicode编码要两字节,utf-8是变长编码,有一字节、两字节、三字节, 一般存储一个中文要三个字节,实际上比Unicode编码还多一个字节),那么为什么还要用utf-8编码呢 ? 这主要是utf-8容错能力好。比如从网络传输一个字符串 “字符编码介绍”,用Unicode编码的话,传输的实际内容是十六进制表示“57 5B 26 7B 16 7F 01 78 CB 4E CD 7E”(前两个字节0x5B57是“字”的Unicode编码,0x7B26是“符”的Unicode编码、、),假如由于网络错误接收者收到的“57 5B 26 7B 16 7F 01 78 CB 4E CD 7E”不完整, 丢了一个字节,成了“57 5B (26丢了) 7B 16 7F 01 78 CB 4E CD 7E”,“符”本来要两字节,现在丢了一个,就导致“符”显示乱码,并丢的这个字节还直接影响了后面的“编码介绍”,使他们都变成了乱码, 最终解码出来的样子就是"字ᙻſ쭸쵎~踀䦎䵄躎", 所以用Unicode编码传输起来很不可靠。 
如果用utf-8的话, 丢掉其中一个字符的某个(或几个)字节,只是对这个字符有影响,对他后面的字符没有影响,后面的字符一样可以正常显示。 这个比Unicode可靠些了。
附一个汉字编码查询的网站:http://bm.kdd.cc/index.asp
------解决方案--------------------
问题一,楼主的理解无比正确,unicode本身定义的就是每个字符的数值,是字符和自然数的映射关系,而UTF-8,或者UTF-16甚至UTF-32则定义了如何在字节流中断字,是计算机领域的概念。

问题二,微软的文化里,提到Unicode,往往指的是UTF-16,这也是目前最常用的UTF规范。微软导致很多人对这个概念的混淆。 所以在微软的软件里,比如记事本,看见Unicode,直接理解成UTF-16,就好理解了。

问题三,不懂java。

至于,为什么会有10万多个字,没错,光我们汉字就有7万多个,这是UTF-16的一种机制,称为surrogate机制,在特殊情况下使用2个WORD来表示一个字符,和内码一样,用特殊的WORD区段表示引导WORD,和后续WORD一起用32位表示一个字符。微软系统从win2K开始支持这种机制。楼主不让发链接,大家自己去搜吧。

所以说UTF-16一定是2个字节表示一个字符,这种说法严格意义上是错误的,但是绝大多数情况下也不会出什么问题。毕竟这些4字节字都是非常非常冷僻的字。

举个例子,大家可以打开WORD,字体切换成方正超大字符集,然后插入->符号,子集选成CJK统一汉字扩充B,这些就是4字节的汉字,打赌这些字你一个也不认识。
------解决方案--------------------
utf8 是 unicode 值的一种存储方式,就象维基百科里介绍的那样,用来存储不定长的字符,根据模板解析,而且文本中间出现损坏、缺失的情况不会使整体文本被打乱,缺点是,要根据编码进行解析,浪费了处理时间。

比如:
一个1字节长的ascii字符,第一字节是0开始的,也就是说是个无符号数;
一个2字节长的字符,第一个字节由110开始,接着的字节由10开始;
一个3字节长的字符,第一个字节由1110开始,接着的字节由10开始;
4字节的就不用介绍了。

这就象一个模板,这些部分是用来给解析器用的,真正的值需要根据首字节的标识来进行重新装配。
后面的字节因为都是10开头的(有符号数),假设中间由于某种情况导致损失了一个字节,并不会象
传统编码那样导致后面的字符会跟着受影响,因为,10这个特殊的头部满足了才表示是后续字节,否
则就是其它字符的开始。

问题2,有标识头:
00000000h: FF FE 31 00 32 00 33 00 ; ?.2.3.
这是一个"123"的文本

问题3,见23楼
------解决方案--------------------

文章评论

程序员的鄙视链
程序员的鄙视链
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
代码女神横空出世
代码女神横空出世
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
我是如何打败拖延症的
我是如何打败拖延症的
中美印日四国程序员比较
中美印日四国程序员比较
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
旅行,写作,编程
旅行,写作,编程
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
漫画:程序员的工作
漫画:程序员的工作
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
我的丈夫是个程序员
我的丈夫是个程序员
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
编程语言是女人
编程语言是女人
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
每天工作4小时的程序员
每天工作4小时的程序员
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
鲜为人知的编程真相
鲜为人知的编程真相
10个调试和排错的小建议
10个调试和排错的小建议
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员和编码员之间的区别
程序员和编码员之间的区别
老程序员的下场
老程序员的下场
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
如何成为一名黑客
如何成为一名黑客
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
那些争议最大的编程观点
那些争议最大的编程观点
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
 程序员的样子
程序员的样子
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员必看的十大电影
程序员必看的十大电影
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
一个程序员的时间管理
一个程序员的时间管理
程序员应该关注的一些事儿
程序员应该关注的一些事儿
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有