【问题标题】:What is a well-formed UTF-16 string?什么是格式良好的 UTF-16 字符串?
【发布时间】:2012-12-04 03:09:44
【问题描述】:

我需要一些帮助来理解格式良好的 UTF-16 字符串的概念,正如 Chapter 2: General Structure 2.7 Unicode String 的这两段中提到的:

"根据编程环境的不同,Unicode 字符串可能需要也可能不需要采用相应的 Unicode 编码形式。例如,Java、C# 或 ECMAScript 中的字符串是 Unicode 16 位字符串,但是不一定是格式良好的 UTF-16 序列。在正常处理中,允许此类字符串包含格式不正确的 UTF-16 的代码单元序列会更有效 ——也就是说,孤立的代理。因为字符串是每个程序的基本组成部分,所以在修改字符串的每个操作中检查孤立的代理可能会产生巨大的开销,特别是因为补充字符在全球程序中占整个文本的百分比是极其罕见的。

只要将此类字符串指定为特定的 Unicode 编码形式(即使是具有相同代码单元大小的字符串),该字符串也不得违反该编码形式的要求。例如,当 Unicode 16 位字符串被指定为格式正确的 UTF-16 时,不允许使用孤立的代理项

【问题讨论】:

    标签: unicode


    【解决方案1】:

    该段落对 UTF-16 进行了解释;格式不正确意味着字符串包含孤立的代理代码单元。

    也就是说,有些代码单元只有成对出现时才有效。 [0xD800-0xDFFF] 范围内的代码单元只能成对出现,其中第一个必须在 [0xD800-0xDBFF] 范围内,第二个必须在 [0xDC00-0xDFFF] 范围内。如果一个字符串不符合这个要求,那么它就不是格式正确的。

    【讨论】:

    • 好的,但这是什么意思? “在正常处理中,允许此类字符串包含格式不正确的 UTF-16 的代码单元序列(即孤立的代理)会更有效。”
    • @user1042389 我已经回答了“隔离代理人”的含义。那你问的是那句话的其他什么部分?
    • 包含不成对代理项的字符串的目的是什么?
    • @user1042389 无,无效。允许出现这种无效字符串的目的是防止它花费可能不值得花费的时间和精力。例如,将字符插入字符串的操作必须进行一系列检查,以确保结果中不会有任何孤立的代理项。由于几乎永远不会有,性能会受到损害而几乎没有任何好处。
    • 你说一堆支票我不明白。如果您有一个低代理项,您只需检查接下来的 16 位是否是高代理项或字符串结尾。这里有什么大不了的?
    猜你喜欢
    • 2012-10-09
    • 2022-12-13
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多