- 浏览: 3010549 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (893)
- android (110)
- iphone (198)
- java (79)
- JavaScript手册-目录 (9)
- JavaScript手册-Array (19)
- JavaScript手册-Boolean (5)
- JavaScript手册-Date (50)
- JavaScript手册-Math (30)
- JavaScript手册-Number (14)
- JavaScript手册-RegExp (7)
- JavaScript手册-String (38)
- JavaScript手册-全局函数 (8)
- JavaScript实用脚本 (7)
- Others (21)
- java-jpcap (7)
- java-thread (1)
- ibm文章 (3)
- classloader (2)
- java-filter (2)
- 运行环境 (33)
- java-正则 (2)
- oracle (1)
- linux-shell (26)
- wap (1)
- sqlite (3)
- wow (1)
- jvm (1)
- git (5)
- unity3d (29)
- iap (2)
- mysql (23)
- nginx (14)
- tomcat (9)
- apache (2)
- php (1)
- ubuntu (40)
- rsa (1)
- golang (21)
- appstore (5)
- sftp (2)
- log4j (2)
- netty (18)
- 测试工具 (6)
- memcache (5)
- 设计模式 (1)
- centos (8)
- google_iab (5)
- iOS专题 (4)
- mac (10)
- 安装配置帮助手册 (2)
- im4java_graphicsmagick (5)
- inotify-tools (1)
- erlang (6)
- 微信支付 (1)
- redis (8)
- RabbitMQ (5)
最新评论
-
heng123:
Netty视频教程https://www.douban.com ...
netty4.0.23 初学的demo -
maotou1988:
使用Netty进行Android与Server端通信实现文字发 ...
netty4.0.23 初学的demo -
码革裹尸:
非常感谢,正好用上
android 呼入电话的监听(来电监听) -
rigou:
提示的/222.177.4.242 无法链接到ip地址,是什 ...
通过 itms:services://? 在线安装ipa ,跨过app-store -
duwanbo:
GridView与数据绑定
引用
本篇属于转载,原文:http://www.netfetch.cn/netfetch/article.asp?id=676
Utf-8编码在国外应用普遍,为什么在国内应用却不多呢?
尤其各大门户网站采用Utf-8的几乎没有。
是否采用Utf-8,这个问题大家争论已久,但是很少有人系统地解说为什么要采用Utf-8编码?
凡事皆有正反!采用Utf-8编码同样有其利弊,当利大于弊,我们当然就采用Utf-8?
关于UTF-8编码和中文字符集
中文有三种字符集,统一文字的编码将是进一步交流的基础。
·国内网站和BLOG较多使用简体中文编码GB2312 字符集;
·港澳台地区网站和部落格使用繁体中文网页编码BIG5字符集;
·UTF-8 包含了简体和繁体中文字符,能正确显示多种语言文字.
统一编码带来的交流便利将在trackback等功能上体现出。
计算机对多国语言的支持
通常在文档只需支持一种语言的情况下,编码只需收录该语言内的字元。最常见的就是拉丁字母用ASCII、简体中文用GB2312、繁体中文用BIG5等。
在越来越国际化的环境下,多语言支持对于软件开发已不再是个可有可无的而是必须的功能。UTF-8就提供了可在同文档同时支持多语言。例如,
汉字:简体字,繁體字
韩文:한국어
阿拉伯文:العربيه
目前很多软件对UTF-8的支持都不太好、开发工具对UTF-8的支持也不全、程序员对UTF-8的了解不深,所以用UTF-8时会碰见许多问题。但我们坚信UTF8是对于多语言支持的趋势也是基础。
Unicode 问答集
问:什么是Unicode?
答:Unicode 给每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论什么语言。Unicode标准已经被这些工业界的领导们所采用,例如:Apple, HP, IBM, JustSystem, Microsoft, oracle, SAP, Sun, Sybase, Unisys和其它许多公司。最新的标准都需要Unicode,例如XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML等等,并且,Unicode是实现ISO/IEC 10646的正规方式。许多操作系统,所有最新的浏览器和许多其他产品都支持它。Unicode标准的出现和支持它工具的存在,是近来全球软件技术最重要的发展趋势。
问:为什么使用Unicode?
答:基本上,计算机只是处理数字。它们指定一个数字,来储存字母或其他字符。在创造Unicode之前,有数百种指定这些数字的编码系统。没有一个编码可以包含足够的字符:例如,单单欧州共同体就需要好几种不同的编码来包括所有的语言。即使是单一种语言,例如英语,也没有哪一个编码可以适用于所有的字母,标点符号,和常用的技术符号。这些编码系统也会互相冲突。也就是说,两种编码可能使用相同的数字代表两个不同的字符,或使用不同的数字代表相同的字符。任何一台特定的计算机(特别是服务器)都需要支持许多不同的编码,但是,不论什么时候数据通过不同的编码或平台之间,那些数据总会有损坏的危险。
问:举个例子吧。
答:比如,简体中文(GB)、繁体中文(BIG5)、日文中,“赵”都是一个字,但是编码不同。在不同的编码下,BIG5的赵是0xBBAF,而0xBBAF在GB里面就被显示为“化”,这就是乱码。而Unicode采用统一的编码,“赵”只有一个,不必管他在哪种文字里。
问:Unicode的优点是什么?
答:举一个最明显的例子就是Windows 2000/XP以及微软Office2000及其后的产品。因为这些软件都是Unicode内核,因此,无论何种文字,都可以在上面正常显示,而且是同屏显示。以前,简体中文的Word文件拿到英文版打开就会是乱码,简体中文的程序在Windows英文版上运行会出现乱码,而现在一切都解决了。
问:中国京剧戏考为什么使用Unicode?
答:因为有些剧本中的生僻字,只在扩展字库或繁体字库中才有,有的甚至没有。而Unicode不仅包含了所有常用字和大部分生僻字,而且因为其可扩展,在现在没有的情况下,将来也是可以扩充的。例如最新的Unicode 4.0标准,较3.0增加了很多生僻字。目前有70207个汉字。再有一点就是Unicode在将来会取代现有的GBK及BIG5。
什么是 UCS 和 ISO 10646?
国际标准 ISO 10646 定义了 通用字符集 (Universal Character Set, UCS). UCS 是所有其他字符集标准的一个超集. 它保证与其他字符集是双向兼容的. 就是说, 如果你将任何文本字符串翻译到 UCS格式, 然后再翻译回原编码, 你不会丢失任何信息.
在 Unix 下使用 UCS-2 (或 UCS-4) 会导致非常严重的问题. 用这些编码的字符串会包含一些特殊的字符, 比如 '' 或 '/', 它们在 文件名和其他 C 库函数参数里都有特别的含义. 另外, 大多数使用 ASCII 文件的 UNIX 下的工具, 如果不进行重大修改是无法读取 16 位的字符的. 基于这些原因, 在文件名, 文本文件, 环境变量等地方, UCS-2 不适合作为 Unicode 的外部编码.
UCS只是规定如何编码,并没有规定如何传输、保存这个编码。例如“汉”字的UCS编码是6C49,我可以用4个ascii数字来传输、保存这个编码;也可以用utf-8编码:3个连续的字节E6 B1 89来表示它。
UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:
UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 1100 0100 1001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
UTF-16
UTF-16是Unicode的其中一个使用方式。 UTF是 Unicode Translation Format,即把Unicode转做某种格式的意思。
它定义于ISO/IEC 10646-1的附录Q,而RFC2781也定义了相似的做法。
在Unicode基本多文种平面定义的字符(无论是拉丁字母、汉字或其他文字或符号),一律使用2字节储存。而在辅助平面定义的字符,会以代理对(surrogate pair)的形式,以两个2字节的值来储存。
UTF-16比起UTF-8,好处在于大部分字符都以固定长度的字节 (2字节) 储存,但UTF-16却无法兼容于ASCII编码。
多语言编码
多语言编码的优点是可以在一个页面里同时显示多种语言。像这样,“アメリカ”、“검색센터”、“กองทัพอากาศ”。但是本地编码的方式通常只能显示一种语言的文字,其他语言的文字就乱码了。
为什么在一个页面里会要多种文字呢?举个例子,blog经常引用别人的网站吧,那么我现在引用了这个“http://www.콘테이너시공테크.com”,还有这个名称比较有趣的“http://www.♣.com”。这就需要多语言的编码了。(这些网站在支持punycode的浏览器里,如mozilla, firefox,是可以直接访问的)
再举个例子,我有一个webmail,界面是中文的,编码是GBK。朋友给我发邮件,中文的、英文的都没有问题,正常显示。可我还有朋友是以色列的,用的是希伯来语给我发的邮件。完蛋,邮件内容都是乱码了。我得手工选择浏览器的编码才能看明白邮件的内容。遗憾的是,这时界面的“回复”按钮又成了乱码,搞得我看不出哪个按钮是回复了。如果webmail是多语言的编码,比如UTF-8,就不会有这样了。
UTF-8对中文为主的网站有个缺点是,页面变长了。不是内容显示变长了,而是文件的size变长了。UTF-8对一个中文字符的编码通常是3个byte,而GB2312是2个byte。
使用UTF-8的原因
由于要使文字档案之中的文字与ASCII兼容,故此 UTF-8 选择了使用可变长度字节来储存 Unicode ,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。
对 UTF-8 的批评
UTF-8 使用可变长度字节储存,使电脑程序设计变得复杂。 (故此,在电脑程序或操作系统内部,多采用UCS-2编码。)
在旧式的中文、日文及韩文编码之中,每字符都使用2字节储存,而UTF-8须使用3字节。 (采用UTF-16编码则可只使用2字节储存。)
泰语以往使用的ISO 8859-11,每字符只使用1字节储存,而UTF-8须使用3字节。
此外,在Windows XP版本中的记事本程序如果保存的是编码类似于UTF-8的GB2312字符,保存重新打开后将错误显示。例如:使用记事本输入“联通”两个字或“毛”字保存后再打开显示错误,如果不全是编码类似于UTF-8的GB2312字符则不会出现这种情况。
下边列出一些Utf-8相关讨论:
xdanger说:”地区编码gb2312的好处就是对于搜索引擎比较友好,特别是baidu的网页快照都是gb2312的,Google搜utf-8的效果也不如gb2312。”
我们盲目的向utf-8靠齐是不明智的,因为使用utf-8 用英文的老外没有增加成本,但是我们为了所谓的兼容却要增加成本。
因为如果是全英文的话,数据库根本不会增加,什么意思呢,就是说如果英文站点换成utf8,只是编码方式变了一下,其他的基本上一点影响都没有,但是带来的好处是鲜见的。其他文字已经在utf-8编码里面了,所以可以任意使用。(例如在英文站点上如果用utf-8,汉字就可以使用了,但是使用3个字节编码,但是汉字毕竟是少数!所以他们不是很在乎。)
但是如果在国内,情况就不同了,大部分都是汉字,用GB2312(国家标准GB18030-2000)编码,两个字节编码,如果换成utf-8后,就变成了3个字节,数据明显增大,有人会说utf-8解决了兼容问题,你试想一下,来中文站点的有几个是使用英文以外语言的!!如果他用英文,恭喜你,只要你装上了GB编码,你就可以自由的使用了,因为GB中是有英文字体的!如果你担心他看不懂中文,那你用utf-8编码的中文他也是看不懂的!
数字图书馆,也就是图书数字化,推荐使用iso 10646 (4byte编码)
特别需要注意的是,ISO 10646 / Unicode也有多种变换形式,UTF-8和UTF-16。新近又增加了UTF-32。从数字化的发展来看,最好直接使用UCS-2而不要涉及这些变换形式,以免造成今后转换的负担。UTF-8看来已经落后;而UTF-16(Surrogate)还不够成熟。UTF-32正处在发展当中。
utf-8是一种歧视性的编码,采用gb2312一个汉字只需要两个字节,而utf-8要三个字节,平白无故的就要多出一个字节来,你想想这样中文文档的存储,网络传输平白又要多出多少浪费来。老外自己都承认了:
Let’s address the problem first: UTF-8 is kind of racist. It allows us
round-eye paleface anglophone types to tuck our characters neatly into one byte, lets most people whose languages are headquartered west of the Indus river get away with two bytes per, and penalizes India and points east by requiring them to use three bytes per character.
就算要统一编码,作为中国人那也只能支持utf-16,而不是utf-8
引用
当世界需要沟通时,请用Unicode!
Unicode官方:
http://www.unicode.org/iuc/iuc10/x-utf8.html
http://www.unicode.org/iuc/iuc10/
发表评论
-
Java的内存机制
2016-08-22 13:27 4821.Java的内存机制 Java 把内存划分成两 ... -
监听域对象中属性的变更的监听器
2016-07-18 19:06 1755监听域对象中属性的变更的监听器 域对象中属性 ... -
HttpSessionActivationListener
2016-07-18 18:46 649HttpSessionActivationListe ... -
Web容器监听器(实现在线统计人数,踢人)
2016-07-18 10:48 951Web容器监听器(实现在线统计人数,踢人) Servl ... -
HttpSessionBindingListener接口
2016-07-18 10:29 642HttpSessionBindingListene ... -
ServletRequestAttributeListener接口
2016-07-17 22:24 8342. HttpSessionAttribut ... -
Servlet3中异步Servlet特性介绍
2016-07-17 15:50 846Servlet3中异步Servlet特性介绍 ... -
HttpSessionAttributeListener
2016-07-15 17:49 696HttpSessionAttributeListener ... -
使用ServletContextAttributeListener
2016-07-15 16:47 847使用ServletContextAttr ... -
ServletRequestListener
2016-07-15 16:25 601ServletRequestListener接口 ... -
HttpSessionListener
2016-07-15 14:56 635HttpSessionListener接口 M ... -
ServletContextListener 接口
2016-07-15 12:16 628在 Servlet API 中有一个 Se ... -
ReflectASM,高性能的反射
2016-04-29 17:19 961http://www.oschina.net/p/r ... -
Java多线程与静态方法
2016-04-26 11:52 850Java多线程与静态方法 在多线程中使用静态方法会发生什么 ... -
log4j日志输出格式
2016-04-12 20:58 1117log4j日志输出格式 在LOG4J的配置文件中,l ... -
Servlet3.0
2016-04-12 16:58 698一、Servlet3.0介绍 Servlet3 ... -
log4j2 使用详解
2016-04-12 14:14 1466log4j2 使用详解 转载自 Blog of ... -
Eclipse jar打包和命令行运行
2016-04-08 10:44 2963?Eclipse jar打包和命令行运行 第1步: ... -
GRAPHICSMAGICK+IM4JAVA错误Cannot run program "gm": error=2
2015-05-19 15:27 4112在通过 GRAPHICSMAGICK+IM4JAVA ... -
GraphicsMagick安装、实时生成缩略图
2015-05-19 13:39 2424GraphicsMagick安装、实时生成缩略图 ...
相关推荐
UTF-8用1到6个字节编码UNICODE字符。 如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能...
C# 生成 XML 文件,编码为 UTF-8 方法是指在 C# 编程语言中,使用特定的方法和类来生成 XML 文件,并将其编码为 UTF-8 编码格式的过程。这种方法常用于数据交换、配置文件、日志记录等领域。 在 C# 中,生成 XML ...
在LabVIEW编程环境中,"UTF-8toGBK.vi"这个程序可能是一个用户自定义的VI(Virtual Instrument),用于将UTF-8编码的字符串转换为GBK编码。LabVIEW作为一个图形化编程语言,提供了丰富的字符串处理函数,其中包括了...
GBK、UTF-8批量文件3秒快速转码工具(支持GBK,UTF-8免费转换),UTF-8/GBK编码在线转换工具,压缩包可以有多目录与文件,如目录中有图片不会转码,但是会随转码好的文件一起打包下载。 使用帮助 . 上传压缩包(仅支持zip...
在C++编程中,UTF-8编码是一种广泛使用的字符编码标准,它能够表示Unicode字符集中的所有字符。本文将深入探讨如何在C++中处理UTF-8字符串,并介绍相关的关键概念和技术。 首先,C++标准库并没有直接支持UTF-8编码...
标题中的“中文-UTF-8编码转换器”指的是一个软件工具,它的主要功能是帮助处理中文和其他特殊字符在UTF-8编码环境下可能出现的乱码问题。UTF-8是一种广泛使用的Unicode字符编码方案,它可以表示Unicode标准中的所有...
标题中的“PB9转换utf-8例子”指的是在PowerBuilder 9(PB9)环境下将数据从非UTF-8编码转换为UTF-8编码的一种解决方案。由于PB9本身不直接支持这种转换,开发者通常需要利用外部库或者特定的编程技巧来实现这个功能...
在IT领域,文本文件的编码方式对于正确地读取和处理文本至关重要。UTF-8是一种广泛使用的字符编码标准,能够表示...在实际开发中,我们应该养成良好的编码习惯,尽量使用标准的UTF-8编码,以减少潜在的兼容性问题。
5. **保存或导出**:转换完成后,用户可以选择保存为新的UTF-8编码文件,以便在需要支持UTF-8的环境中使用。 在处理网页、数据库、电子邮件、软件本地化等场景时,UTF-8编码尤其重要。它能确保跨平台、跨语言的数据...
为大家提供Python的UTF-8编码查询表,大家可以对照左列的编码查询右列的汉字。 例:\u4e00对应汉字“一”
最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码。 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,...
### UTF-8编码详解与汉字码表解析 #### UTF-8编码原理 UTF-8(Unicode Transformation Format - 8 bits)是一种变长字符编码,由Ken Thompson于1992年设计,旨在解决多语言环境下字符编码兼容性问题。其核心优势...
使用简单俩个接口分别是u2g,即UTF-8编码转成GBK编码,g2u,即将GBK编码转成UTF-8编码。与平台无关,只要将.h文件加入你的工程代码中,即可轻松实现俩种编码格式的转换。配合在线编码转换工具网站验证。
UTF-8编码是一种广泛使用的字符编码标准,尤其在网络和计算机系统中扮演着核心角色。它能够表示Unicode字符集中的所有字符,包括世界各地的各种语言。UTF-8的优势在于其兼容性和效率,不同平台和语言通常都能无缝...
百度编辑器ASP版UTF-8编码是一个用于网页内容编辑的工具,它专为ASP(Active Server Pages)开发环境设计,并采用UTF-8编码标准。UTF-8是一种广泛使用的多字节字符编码,能够支持全球大部分语言,包括中文,使得...
UTF-8编码是一种广泛使用的字符编码标准,它能够表示Unicode字符集中的所有字符。在Visual Basic编程环境中,处理UTF-8编码的文件或数据时,你需要理解如何读取、写入以及转换UTF-8格式的数据。以下是一些关键的知识...
UTF-8编码的文本文件在处理中文字符时,如果没有正确设置编码,可能会导致中文字符显示不正确,即出现乱码现象。SAS EG是一个图形用户界面的程序,它提供了数据管理、统计分析、报告创建等功能,但它在处理不同编码...
在给定文件“UTF-8汉字码表.txt”的描述中提到的“utf-8中文汉字编码表”,主要关注的是如何用UTF-8编码来表示中文汉字。 #### 二、文件内容分析 文件中展示了一些具体的编码示例,从十六进制数字`20`到`7E`以及从...
UTF-8-BOM,全称是“UTF-8 Byte Order Mark”,它在UTF-8编码的文件开头添加了一个特殊的字节序列(0xEF, 0xBB, 0xBF)来标识该文件使用的是UTF-8编码。BOM主要用于帮助软件识别文件的编码,但并非所有UTF-8编码的...
对于ASCII字符,UTF-8编码与ASCII相同,都是单字节。UTF-8的特殊之处在于它包含一个字节顺序标记(BOM),即UTF-8+BOM,但大多数情况下,UTF-8无BOM更常见。 在PHP中,进行字符编码转换可以使用内置函数,如`mb_...