UTF-16
UTF-16 是 Microsoft 的编码标准,在 Windows 操作系统中 UTF-16 是一个扩展,其设计用途是处理附加的 1,048,576 个字符。对代理项范围的需要甚至在 Unicode 2.0 发布之前就已意识到了,因为事实清楚地表明,仅使用 65,536 个字符无法实现 Unicode 的用单一码位表示每种语言的每个字符的目标。例如,某些语言(例如,中文)至少需要那样多的字符才能对历史和文学表意文字等字符进行编码,这些字符尽管很少使用,但对出版和学术有着重要意义。下一部分提供了有关代理项范围的详细信息。
字串9
UTF-16 与 UCS-2 类似,也使用 little endian 字节顺序,在 Windows 上执行的任何操作都遵循该顺序。Little endian(与 big endian 相对)意味着低位字节存储在内存中的最低地址处。在操作系统级别字节的排序有重要意义。SQL Server 以及运行在 Windows 平台上的其他应用程序都使用 little endian 字节顺序。因此,0x1234 这样的十六进制词语以 0x34 0x12 形式存储在内存中。在某些情况下,可能需要显式地反转字节顺序以正确地读取字符的编码。SQL Server Integration Services 提供了用于转换 Unicode 文本字节顺序的函数。有关详细信息,请参阅本文的 SQL Server 2005 Integration Services 部分。
补充字符和代理项对 月落
Microsoft Windows 通常使用 UTF-16 来表示字符数据。使用 16 位允许表示 65,536 个唯一字符。不过,即使是这么多的字符也不足以涵盖人类语言中使用的所有符号。在 UTF-16 中,某些码位紧接着前两个字节使用另一个码位,以将该字符定义为代理项范围的一部分。 字串8
在 Unicode 标准中,有 16 个字符“平面”,具有定义多达 1,114,112 个字符的潜力。平面 0(或称基本多语言块 (BMP))可以表示世界上的大部分书面文字、出版中使用的字符、数学和技术符号、几何图形、所有 100 级 Zapf Dingbat 以及标点符号。 yueluo.net
在 BMP 之外,大部分平面中的字符仍未定义,但可以用来表示补充字符。补充字符主要用于历史和古典文学典籍,以协助处理中文、韩语和日语丰富文学遗产的编码。补充字符还包括古代北欧文字以及其他具有历史意义的文字、音乐符号等。
在 UTF-16 中,一对码位(称为代理项对)用于表示主字符集 (BMP) 之外的字符。代理项区是 Unicode 中从 U+D800 到 U+DFFF 的一个范围,其中包含 1,024 个低代理项值和 1,024 个高代理项值。高代理项(范围 U+D800 到 U+DBFF)和低代理项(范围 U+DC00 到 U+DFFF)相结合可以表示超过一百万个可能的字符。 月落网
仅具有代理项对的一半将视为无效;高代理项必须始终跟有低代理项,才算有效。这使得代理项的检查变为范围检查,它比检测 DBCS(双字节字符系统)字符所需的相当复杂的规则要简单。 字串8
尽管 UCS-2 不能识别代理项,但 SQL Server 2000 和 SQL Server 2005 都可以存储代理项对。SQL Server 将代理项对视为两个未定义的 Unicode 字符而非单一字符。此类应用程序通常称为“代理中性”或“代理安全”,这意味着它们不具备固有的与数据进行交互的能力,但至少可以做到存储的数据不会丢失。 字串6
作为对照,“能够识别代理项的”应用程序不仅可以识别代理项对,还可以处理组合字符和需要特殊处理的其他字符。编写良好的应用程序可以检测到分开的代理项,并且只通过几个子例程就可以将它们重新组合。可以识别代理项的应用程序包括 Microsoft Word 和 Internet Explorer 5 及更高版本。 字串5
在 SQL Server 中处理补充字符时,请记住以下几点: 字串5
•因为代理项对被视为两个独立的 Unicode 码位,所以 nvarchar(n) 的大小必须是 2,以容纳单一补充字符(换言之,代理项对所需的空间)。
•不支持在元数据(例如,数据库对象的名称)中使用补充字符。一般来说,元数据中使用的文本必须符合标识符的规则。有关详细信息,请参阅《SQL Server 2005 联机丛书》中的标识符。
•标准字符串操作不能识别补充字符。SUBSTRING(nvarchar(2),1,1) 之类的操作仅返回补充字符代理项对的高代理项。LEN 函数为遇到的每个补充字符返回两个字符的计数:一个计数对应高代理项,一个计数对应低代理项。不过,可以创建能够识别补充字符的自定义函数。《SQL Server 2005 联机丛书》的可识别补充字符的字符串操作中的 StringManipulate 示例演示了如何创建此类函数。
字串6
•对补充字符的排序和搜索行为可能会随排序规则的不同而发生变化。在新的 90_and BIN2 排序规则中,可以正确地对补充字符进行比较,而在早期排序规则和标准 Windows 排序规则中,所有补充字符的比较都视同所有其他补充字符的比较。例如,默认的日语和朝鲜语排序规则不处理补充字符,而 Japanese_90 和 Korean_90 则会进行处理。 yueluo.net
有关 Unicode 码位、设计可识别代理项的应用程序的最佳实践以及处理 Unicode 数据的详细信息,请参阅循序渐进全球化:支持 Unicode。有关 Unicode 标准中支持的字符范围的信息,请参阅 Unicode 技术标准 #18 中关于 Unicode 正则表达式的部分。
字串7
组合字符
字串6
“组合字符”是与其他字符一起使用以修改其外观或含义的字符。组合的字符会形成单一字形。例如,欧洲语言中使用的音调符号便是组合字符,可以作为字符加音调符号的形式或预构成字符的形式出现。 字串5
在 .NET Framework 中,将组合字符的顺序视为文本元素,即显示为单个字符的文本单元。文本元素有别于排序元素。例如,在某些排序规则中,字母“CH”不是组合字符;它们是两个独立的文本元素,但可以将它们视为一个排序元素。
注意 SQL 函数的做法有所不同,它通常将组合字符与补充字符一视同仁:它们将组合字符作为两个独立的 Unicode 码位进行处理。有关如何创建能够更准确地对补充字符进行计数和比较的自定义函数的示例,请参阅 StringManipulate 示例。
组合字符映射到排序元素的方式取决于 Unicode 标准和排序规则这两者。某些组合字符始终被视为等同于它们的变体形式,无论它们包括多少不同的码位(例如,拉丁文字母加音调符号被视为等同于包括音调符号的预构成字符),而在某些排序规则中,可以根据音调符号是否存在以不同方式对字符串进行排序或比较。
www.yueluo.net
组合字符最初是在 Unicode 2.0 中定义的。有关详细信息,请参阅论述“特殊区域和格式字符”的 Unicode 4.0.1 规范部分。Unicode Consortium 还发布了专门针对组合字符及其处理的 FAQ。有关在 .NET Framework 中处理组合字符的方法的详细信息,请参阅《.NET Framework 开发人员指南》中的标准化。 www.yueluo.net
对 GB18030 的支持 www.yueluo.net
GB18030 (GB18030-2000) 是中华人民共和国 (PRC) 颁布的一项针对中文字符编码的独立标准。它对扩展代码页和与 Unicode 的映射表都做了规定。官方要求从 2006 年 8 月 1 日起,在 PRC 境内销售的所有软件产品都必须支持此字符集。GB18030 一致性包括对支持一些以前并不支持的语言(例如,藏文、蒙文、彝文和维吾尔文)的要求。 字串8
在 GB18030 中,字符可以是 1、2 或 4 个字节。代理项对用于支持 GB18030 的 4 字节序列与 Unicode 的映射。 字串8
SQL Server 2005 通过在采用 GB18030 编码的字符从客户端应用程序进入服务器时对它们进行识别来提供对这些字符的支持。SQL Server 2005 会在本地对这些字符进行转换,并将它们存储为 Unicode 字符。这些字符存储在服务器中后,在对它们执行的所有后续操作中均将它们视为 Unicode 字符。GB18030 不具有系统区域设置;它只有一个代码页标识符,以实现与 Unicode 之间的相互转换。Microsoft 针对 GB18030-2000 的代码页标识符为 54936。 字串9
使用 GB18030 字符时,请记住这些字符可以在排序和比较操作中使用,但如果使用的是 SQL Server 90 之前的排序规则,将只能基于这些字符的码位而不能基于其他有语言意义的方式进行比较。因此,在 ORDER BY、GROUP BY 和 DISTINCT 等操作中使用 GB18030 字符时,尤其是在同一操作中同时包括 GB18030 字符和非 GB18030 字符时,应谨慎行事。要支持有意义的使用 GB18030 字符的字符串比较,请使用新的 SQL Server 90 排序规则版本(以添加到其名称中的 90 后缀表示)。例如,请使用 Chinese_PRC_90 排序规则,而不使用 Chinese_PRC 排序规则。 月落网
要启用对 GB18030 标准的支持,可以安装一个支持软件包,该软件包可以从 Microsoft 产品帮助和支持门户下载,其中包括支持 GB18030 与 Unicode 之间转换所需的字体文件和库。该支持软件包是一个可以在 Windows XP 或 Windows 2000 上安装的单一全球二进制。不过,系统必须安装可选的东亚语言支持。Windows Vista 中包括了对 GB18030 标准的支持,其中包括针对中国少数民族语言(如藏文、蒙文、彝文和维吾尔文)的字体和键盘布局。这些语言均使用中文 (PRC) 区域设置。 字串7
注意Vista 中不支持某些将 GB18030 字节转换为 Unicode 字符的函数,如 BytesToUnicode。在 Vista 中将 GB18030 字节转换为 Unicode 字符时,请使用 MultiByteToWideChar 函数。
字串5