首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏刨根究底学编程

    刨根究底字符编码之十三——UTF-16编码方式

    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只有两个字节,根本无法编码增补平面字符)。

    1.6K41发布于 2019-01-18
  • 来自专栏前端自习课

    【Web技术】295- 重新复习 Unicode 和 UTF-8

    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

    68730发布于 2019-07-25
  • 来自专栏阮一峰的网络日志

    Unicode与JavaScript详解

    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。

    1K70发布于 2018-04-12
  • 来自专栏程序员成长充电站

    Unicode编码

    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以字节为编码单元,没有字节序的问题。

    1.9K10发布于 2019-08-19
  • 关于字符编码

    早期的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-

    62010编辑于 2024-06-25
  • 来自专栏GitHub专栏

    万字长文讲解编码知识,看这文就够了!

    (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对比: ?

    4.1K30发布于 2020-06-18
  • 来自专栏小工匠聊架构

    Java-Java I/O流解读之基于字符的I / O和字符流

    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

    2.2K30发布于 2021-08-17
  • 来自专栏京程一灯

    JavaScript 有个 Unicode 的天坑

    本文涉及知识点: 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

    1.3K20发布于 2019-03-28
  • 来自专栏私人订制

    PHP:JSON字符串转换为中文,中文转换为JSON字符串

    可以包含中文字母数字 * @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

    1.9K20编辑于 2023-05-11
  • 来自专栏【腾讯云开发者】

    从JavaScript看字符编码的前世今生!

    很多人会把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。

    1.3K10编辑于 2022-05-18
  • 来自专栏C/C++基础

    精述字符编码

    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的父集。

    2.1K33发布于 2018-08-03
  • 来自专栏mythsman的个人博客

    字符集与字符编码的强化理解与操作实践

    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)编码。

    68720编辑于 2022-11-14
  • 来自专栏怡文菌

    PHP 的 UNICODE 编码和解码

    方法一: 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

    1.9K20编辑于 2022-12-15
  • 来自专栏全栈程序员必看

    python encode和decode函数说明[通俗易懂]

    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以字节为编码单元,没有字节序的问题。

    1.9K30编辑于 2022-09-07
  • 来自专栏YashanDB知识库

    YashanDB UNISTR函数

    本函数遵循如下规则:Unicode编码限制为UCS-2编码格式,格式为''后加4位16进制。若要将反斜杠包含在字符串本身中,需在其前面加上另一个反斜杠,不符合的格式将会报错。本函数不支持向量化计算。 本函数遵循如下规则:Unicode编码限制为UCS-2编码格式,格式为''后加4位16进制。若要将反斜杠包含在字符串本身中,需在其前面加上另一个反斜杠,不符合的格式将会报错。本函数不支持向量化计算。

    24210编辑于 2025-08-11
  • 来自专栏米扑专栏

    UNICODE,GBK,UTF-8区别

    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以字节为编码单元,没有字节序的问题。

    3.5K21发布于 2019-02-19
  • 来自专栏peakxie

    Json string值如何传递0x00-0xFF(5分钟理解Unicode,UTF8)

    Unicode characters,世界各个国家的字符编码成0x00-0x10FFFF的值(通用编码字符集),一共有17个0x00-0xFFFF平面,其中0x00-0xFFFF为基本多语言平面(UCS UCS-2就是2个字节表示通用编码字符集,UCS-4就是4个字节表示。

    2.4K70发布于 2018-07-17
  • 来自专栏lulianqi

    UNICODE,GBK,UTF-8

    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以字节为编码单元,没有字节序的问题。

    3.2K20发布于 2018-08-30
  • 来自专栏ChaMd5安全团队

    addslashes防注入的绕过案例(AFSRC获奖白帽子情痴)

    'UCS-2BE' : 'UCS-2'; $str = rawurldecode($str); preg_match_all("/%u.{4}|&#x.{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

    4.5K90发布于 2018-03-29
  • 来自专栏全栈程序员必看

    常见字符集&乱码问题

    它是与UNICODE同类的组织,UCS-2和UNICODE兼容。 位数:它有UCS-2和UCS-4两种格式,分别是2字节和4字节。 范围:目前,UCS-4只是在UCS-2前面加了0x0000。

    1.1K20编辑于 2022-09-05
领券