而UCS-2,是早期遗留下来的历史产物。 UCS-2将字符编号直接映射为字符编码(CEF,而非CES,详见前文中对现代字符编码模型的解释),亦即字符编号就是字符编码,中间没有经过特别的编码算法转换。 但Unicode字符集增补平面中的字符(大致相当于UCS字符集UCS-4字符中除开UCS-2字符的部分,因为广义上的UCS-4字符实际上包含了UCS-2字符,当然狭义上的UCS-4字符不包括UCS-2字符 ,在了解其历史原因之后,将UCS-2和UCS-4同时理解为编号字符集CCS和字符编码方式CEF也未尝不可);而若将UCS-2等同于UTF-16,将UCS-4等同于UTF-32(后文会有介绍),显然也是不合适的 UCS-2所编码的字符集中的U+D800~U+DFFF这部分代理码点除外的话,UTF-16所编码的字符集可看成是UCS-2所编码的字符集的父集。 但当引入增补平面字符后,UTF-16与UCS-2的编码就不完全相同了(事实上,由于UCS-2只有两个字节,根本无法编码增补平面字符)。
Unicode 常用的编码方式有 UTF-8, UCS-2, UTF-16 三种,另外还有一种 UTF-32 虽然不太常用也需要提一下。 Unicode 的体系结构是什么样的? UCS-2 编码 UCS-2 只使用了两个字节(16 bit) 来表示字符,也就是说只能表示 65536 个字符,它只能表示 BMP 中的字符。 当前的 unicode 字符数量已远远超过了 UCS-2 的数量,因此 UCS-2 虽然还在被好多软件使用,但它已经过期了。 正因为 UCS-2 编码依然被许多软件使用,为了能够表示出 BMP 以外的平面内的字符,就产生了一种新的编码 UTF-16 编码。 UTF-16 编码 UTF-16 就是为了解决 UCS-2 编码的问题而生的,它扩展自 UCS-2 基本多文种平面中,与 UCS-2 编码完全一致,使用两个字节表示 U+010000 到 U+10FFFF
JavaScript用的是UCS-2! 六、UCS-2编码 怎么突然杀出一个UCS-2?这就需要讲一点历史。 互联网还没出现的年代,曾经有两个团队,不约而同想搞统一字符集。 UTF-16编码迟至1996年7月才公布,明确宣布是UCS-2的超集,即基本平面字符沿用UCS-2编码,辅助平面字符定义了4个字节的表示方法。 两者的关系简单说,就是UTF-16取代了UCS-2,或者说UCS-2整合进了UTF-16。所以,现在只有UTF-16,没有UCS-2。 对比UTF-16的发布时间(1996年7月),就会明白Netscape公司那时没有其他选择,只有UCS-2一种编码方法可用! 问题就来了,4个字节的编码不属于UCS-2,JavaScript不认识,只会把它看作单独的两个字符U+D834和U+DF06。
3、UCS-2、UCS-4、BMP UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。 将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。 从UCS-2到UTF-8的编码方式如下: UCS-2编码(16进制) UTF-8 字节流(二进制) 0000 - 007F 0xxxxxxx 0080 - 07FF 110xxxxx 10xxxxxx 不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。 但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。 5、UTF的字节序和BOM UTF-8以字节为编码单元,没有字节序的问题。
早期的Unicode字符集(Unicode Character Set)使用2字节编码,即UCS-2。 后来又出现了4字节编码,即UCS-4UCS在计算机中的存储格式叫做UTF(Unicode Transformation Format)UCS-2最直接的存储格式就是UTF-16了。 UTF-16是完全对应于UCS-2的,即把UCS-2规定的字符直接保存下来。而根据字符序,又分为UTF-16LE (Little Endian)和UTF-16BE (Big Endian)。 由于UCS-2没有定义FFFE, 因此规定只要出现FFFE就是UTF-16LE,出现FEFF就是UTF-16BEUTF-32就简单了,它用四个字节表示字符,这样就可以完全表示UCS-4,而无需像UTF-
(2)UCS-2和UCS-4 ISO10646标准为“通用字符集”(UCS)定义了一种16位的编码形式(即UCS-2),UCS-2全称Universal Character Set coded in 2octets 例:“汉”的UCS-2编码为6C49。 我们可以将UTF-16编码看成是UCS-2编码父集。在没有辅助平面字符(surrogate code points)前,UTF-16与UCS-2所指的是同一意思。 现在应该认为UCS-2已作废,如果有人还用这种,也不必纠结,它就是表达用定长2字节编码,自己心里清楚就行(基本上你查维基百科上UCS-2都是重定向到UTF-16)。 以往的UCS-2和UCS-4概念就默认作废了这样一个关系,整个他们的发展长话短说就是这样,懂了吗。 2、UTF-8、UTF-16、UTF-32、UCS-2、UCS-4对比: ?
Java内部将字符(字符类型)存储在16位UCS-2字符集中。 字符流需要在外部I / O设备使用的字符集和Java内部UCS-2格式之间进行转换。 例如,字符“您”在UCS-2(Java内部)存储为 “60 A8”,在UTF8中为“E6 82 A8”,GBK / GB2312中为“C4 FA”, BIG5中为“B1 7A”。 - java.nio.charset(JDK 1.4)包 JDK 1.4提供了一个新的包java.nio.charset作为NIO(New IO)的一部分,以支持Java程序内部使用的Unicode(UCS ; // with non-ASCII chars // Java internally stores char in UCS-2/UTF-16 // Print the
本文涉及知识点: Unicode (BMP/SP) UTF-8 UTF-16 UTF-32 UCS-2 javascript字符处理 Unicode Unicode是目前绝大多数程序使用的字符编码,定义也很简单 如 UCS-2 用2个字节表示BMP的码点 UCS-4 用4个字节表示码点 UCS-2是一个过时的编码方式,因为它只能编码基本平面(BMP)的码点,在BMP的编码上,与UTF-16是一致的,所以可以认为是 答案是UCS-2。咦,刚刚不是说UCS-2过时了吗? 首先看下年表 1990 UCS-2 诞生 1995.5 JavaScript 诞生 1996.7 UTF-16 诞生 也就是说,Brendan Eich在写JS的时候,UTF-16还没问世,所以只能用UCS
可以包含中文字母数字 * @return string */ function json_encode($chinese_str) { $chinese_str = iconv('UTF-8', 'UCS (substr($str, 4), 16, 10); $c = chr($code).chr($code2); $c = iconv('UCS
很多人会把UTF-16误认为是定长的2字节表示,实际上是跟UCS-2的混淆: UTF-16可看成是UCS-2的父集。 Python语言环境从2.0版本开始官方只在内部使用UCS-2,但UTF-8解码器到“Unicode”会产生正确的UTF-16。 Java最初使用UCS-2,并在J2SE 5.0中添加了UTF-16补充字符支持。 JavaScript可能使用UCS-2或UTF-16。 PHP语言和MySQL也支持UCS-2。 Swift 5,Apple的首选应用程序语言,从UTF-16切换到UTF-8作为首选编码。 可以看到,JavaScript引擎可以在内部自由使用UCS-2或UTF-16。目前大多数引擎实现都是UTF-16。
7.UCS、UCS-2与UCS-4 说到字符编码,大家肯定听过UCS-2和UCS-4,在说完Unicode,好学的大家肯定心存疑惑,UCS-2和UCS-4和Unicode之间的关系和区别到底是什么? 那么UCS-2和Unicode的0好平面又是啥关系呢?其实UCS-2编码的字符和Unicode的BMP编码的字符是相同的,因此UCS-2就是Unicode的BMP。 那么UCS-2是那个机构颁发的呢,很显然是ISO。那么UCS-2和UCS有时什么关系呢?UCS-2是UCS的子集,UCS-2是UCS的编码方式之一。 UCS-2采用两个字节编码字符,只能标识65536个字符,对于Unicode编码的字符已经超过了十万个,很显然UCS-2只能标识了Unicode的0号平面字符,对于其它辅助平面字符,UCS-2就无能为力 但是对于BMP外的其它辅助平面字符,UCS-2却无法表示,但是UTF-16用1个或者2个16位长的码元来表示,既可以容纳UCS-2,也可以表示辅助平面字符,因此UTF-16可看成是UCS-2的父集。
Unicode有一个默认的编码叫UCS-2 这个概念是非常坑的,正式因为Unicode有一个默认的编码UCS-2(Universal Character Set),因此才导致了概念的混乱。 我们可以在很多地方看见所谓“Unicode编码”这个概念,其实他们说的不是Unicode字符集,而是UCS-2编码。 因此很多地方提到说"Unicode编码最多能表示65536个字符",其实指的是UCS-2编码。 显然,这种编码方式并不具备较好的扩展性。 我们前面提到Unicode已经有13万个字符了,显然UCS-2编码搞不定了。 因此当前很多系统都不会默认用UCS-2编码,而是用扩展性更好的UTF-8编码,不过在windows中还是经常会用到Unicode(UCS-2)编码。
方法一: function unicode_encode($name) { $name = iconv('UTF-8', 'UCS-2', $name); $len = strlen($ (substr($str, 4), 16, 10); $c = chr($code).chr($code2); $c = iconv('UCS
3、UCS-2、UCS-4、BMP UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。 下面让我们做一些简单的数学游戏: UCS-2有2^16=65536个码位,UCS-4有2^31=2147483648个码位。 UCS -4根据最高位为0的最高字节分成2^7=128个group。 将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。 不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF -16和UCS-2基本相同。 但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。 5、UTF的字节序和BOM UTF -8以字节为编码单元,没有字节序的问题。
本函数遵循如下规则:Unicode编码限制为UCS-2编码格式,格式为''后加4位16进制。若要将反斜杠包含在字符串本身中,需在其前面加上另一个反斜杠,不符合的格式将会报错。本函数不支持向量化计算。 本函数遵循如下规则:Unicode编码限制为UCS-2编码格式,格式为''后加4位16进制。若要将反斜杠包含在字符串本身中,需在其前面加上另一个反斜杠,不符合的格式将会报错。本函数不支持向量化计算。
3、UCS-2、UCS-4、BMP UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。 将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。 从UCS-2到UTF-8的编码方式如下: UCS-2编码(16进制) UTF-8 字节流(二进制) 0000 - 007F 0xxxxxxx 0080 - 07FF 110xxxxx 10xxxxxx 不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。 但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。 5、UTF的字节序和BOM UTF-8以字节为编码单元,没有字节序的问题。
Unicode characters,世界各个国家的字符编码成0x00-0x10FFFF的值(通用编码字符集),一共有17个0x00-0xFFFF平面,其中0x00-0xFFFF为基本多语言平面(UCS UCS-2就是2个字节表示通用编码字符集,UCS-4就是4个字节表示。
3、UCS-2、UCS-4、BMP UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。 将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。 从UCS-2到UTF-8的编码方式如下: UCS-2编码(16进制) UTF-8 字节流(二进制) 0000 - 007F 0xxxxxxx 0080 - 07FF 110xxxxx 10xxxxxx 不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。 但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。 5、UTF的字节序和BOM UTF-8以字节为编码单元,没有字节序的问题。
'UCS-2BE' : 'UCS-2'; $str = rawurldecode($str); preg_match_all("/%u.{4}|.{4};|d+ $ar[$k] = mb_convert_encoding(pack("H4", substr($v, -4)), strtoupper(IN_CHARSET), "UCS $ar[$k] = mb_convert_encoding(pack("H4", substr($v, 3, -1)), strtoupper(IN_CHARSET), "UCS $ar[$k] = mb_convert_encoding(pack("H4", substr($v, 2, -1)), strtoupper(IN_CHARSET), "UCS
它是与UNICODE同类的组织,UCS-2和UNICODE兼容。 位数:它有UCS-2和UCS-4两种格式,分别是2字节和4字节。 范围:目前,UCS-4只是在UCS-2前面加了0x0000。