UTF-8 中的代理字符是什么?

2023-11-22

我有一个奇怪的验证程序,用于验证 utf-8 字符串是否是有效的主机名(PHP 中的 Zend Framework Hostname valdiator)。它允许 IDN(国际化域名)。它将每个子域与由其十六进制字节表示定义的字符集进行比较。两个这样的集合是D800-DB7F and DC00-DFFF。 PHP正则表达式比较函数调用preg_match在这些比较期间失败,它说DC00-DFFF此函数中不允许使用字符。从维基百科我了解到这些字节在 UTF-8 中被称为代理字符。它们是什么以及它们实际上对应于哪些字符?我读了好几个地方,但还是不明白它们是什么。


UTF-8 中的代理字符是什么?

这几乎就像一个技巧问题。

近似答案#1:4 个字节(如果配对并以 UTF-8 编码)。

近似答案#2:无效(如果未配对)。

近似答案#3:它不是 UTF-8;它不是 UTF-8。它是修改后的UTF-8.

概要:该术语不适用于 UTF-8。

Unicode 代码点的范围需要 21 位数据。

UTF-16 代码单元为 16 位。 UTF-16 将某些范围的 Unicode 代码点编码为一个代码单元,将其他代码点编码为两个代码单元对,第一个来自“高”范围,第二个来自“低”范围。 Unicode 将与高低对范围匹配的代码点保留为无效。他们有时被称为代理人,但他们不是角色。它们本身没有任何意义。

UTF-8 代码单元是 8 位。 UTF-8 分别以一到四个代码单元对几个不同范围的代码点进行编码。

#1 碰巧 UTF-16 使用两个 16 位代码单元编码的代码点,UTF-8 使用 4 个 8 位代码单元编码,反之亦然。

#2 可以对无效的codepoint应用UTF-8编码算法,即无效。它们无法解码为有效的代码点。兼容的读取器会抛出异常或抛出字节并插入替换字符 (�)。

#3 Java 提供了一种通过称为 JNI 的系统在外部代码中实现功能的方法。 Java String API 提供对 String 和 char 作为 UTF-16 代码单元的访问。在 JNI 的某些地方,可能是为了方便起见,字符串值是修改后的UTF-8。 Modified UTF-8 是应用于 UTF-16 代码单元而不是 Unicode 代码点的 UTF-8 编码算法。

无论如何,字符编码的基本规则是使用用于写入的编码进行读取。如果要将任何字节序列视为文本,则必须知道编码;否则,您会丢失数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UTF-8 中的代理字符是什么? 的相关文章

随机推荐

  • 快速更改 UImenu 的位置

    我想向我的应用程序添加一个 UIMenu 我正在练习它 现在有一个问题是否可以设置 UIMenu 的位置UIMenu比当前显示的按钮稍高一点 正如您在这张照片中看到的 菜单当前覆盖了选项卡栏 我想将其设置为比选项卡栏高一点 这是我的代码 l
  • 如何从 setuptools 安装程序 (setup.py) 中生成 python grpc 代码?

    我们在存储库中有一些 gRPC 的原型文件 我读到提交生成的代码并不好 所以我想我需要将生成作为软件包安装的一部分 例如 setuptools setup py 但是 要生成 gRPC 代码 您需要首先通过运行来安装包pip install
  • Spring Data 中的查询创建 - 动态 where 子句

    Spring data中有没有办法动态形成where子句 我想要做的是有一个方法 类似于 findBy get 方法 它使用上述非 NULL 属性运行 WHERE 和 AND 例如 Consider the object Person fi
  • SQL Server 分区 - 唯一索引错误

    我有一个按 TRANSACTION DATE TIME 分区的表 表有一列 ID 我想为分区方案上的 ID 创建一个唯一索引 如下所示 CREATE UNIQUE NONCLUSTERED INDEX IX ID ON PS DATETIM
  • 在 AngularJS 中拒绝带有多个参数的 Promise(如 $http)

    回调 httpPromise 有多个参数 主体 状态 标头 配置 我想手动创建类似的承诺 但不知道该怎么做 我想做的或多或少是 myservice action then function status message config 我知道
  • IIS7 劫持我的 Coldfusion 错误页面

    在我的异常处理文件中 我将状态代码设置为 404 然后渲染 n 个 HTML 页面 作为错误页面 想想失败鲸鱼
  • 同时安装 Visual Studio 2010 和 VS2008 会导致问题吗?

    这可能会导致什么样的问题 安装在虚拟机里更好吗 并行安装问题始终可能存在 您应该采取适当的保护措施 例如备份 使用虚拟机等 根据我个人的经验 它的效果很好 在我的 Tech Ed 演示中 我使用 Visual Studio 2005 200
  • 如何更改 Java 中 HTTP 响应中的字符集编码

    我必须从远程服务器获取一些 JSON 对象 为此我正在使用这个功能 它工作得很好 除了有时会获取一些奇怪的数据 我相信这是因为它使用 ASCII 字符集进行解码 请在下面找到我正在使用的方法 public HttpResponse call
  • Java 中的双向映射? [复制]

    这个问题在这里已经有答案了 我在 Java 中有一个简单的整数到字符串的映射 但我需要能够轻松地从整数检索字符串 以及从字符串检索整数 我尝试过 Map 但它只能从整数中检索字符串 这是一种方法 private static final M
  • 如何在 ASP.NET Core 中结合 FromBody 和 FromForm BindingSource?

    我创建了一个新的 ASP NET Core 2 1 API 项目 其中包含Datadto 类和此控制器操作 HttpPost public ActionResult
  • 如何获取对象属性的类型提示?

    我想获取对象属性的类型提示 我只能获得该类的提示 而不能获得该类的实例 我尝试过使用foo instance class from here但这只显示了类变量 那么在示例中我如何获得类型提示bar class foo var int 42
  • 在 Genymotion Android 中连接到 VPN

    我正在尝试在 Genymotion 虚拟设备中配置并连接到 VPN 我可以在虚拟设备中配置 VPN 连接 但无法连接 没有显示错误 我在我的 PC 和真实 Android 设备中使用了相同的设置 它在设备和 PC 中运行良好 我认为是 Vi
  • 在单个 RDS 文件中保存多个变量

    我想将变量列表传递给 saveRDS 以保存它们的值 但它会保存它们的名称 variables lt c A B C saveRDS variables file R 它保存单个向量 变量 我也尝试过 save variables file
  • 如何从文件中读取前 n 行和后 n 行?

    如何读取文件的前n行和后n行 For n 2 我读online that head n2 tail n2 会起作用 但事实并非如此 cat x 1 2 3 4 5 cat x head n2 tail n2 1 2 预期输出为n 2将会 1
  • 对多个条件使用 if else 语句

    样本数据 x lt runif 100 min 0 max 1 y lt runif 100 min 0 max 1 dif lt x y dat lt data frame x dif 我想要做的是在数据框中创建另一列dat called
  • 如何在容器内运行 kubectl 命令?

    在 pod 内的容器中 如何使用 kubectl 运行命令 例如 如果我需要在容器内执行类似的操作 kubectl 获取 Pod 我已经尝试过 在我的 dockerfile 中 我有以下命令 RUN curl LO https storag
  • php ajax表单提交而不刷新父页面

    我有一些关于 ajax 表单提交的问题 send on click function ajax type POST url ads process php data ads serialize success function if dat
  • 使用 Java Graphics 进行内部剪辑

    我需要使用 java awt Graphics 绘制一条线 但只应渲染位于矩形之外的线部分 是否可以使用图形剪切支持 或者我是否需要自己计算交集并剪切线 您需要使用Area班级 此示例将演示如何执行您所要求的操作 import java a
  • 将 NIB 文件转换为 XIB 文件

    有没有办法转换NIB文件到XIB文件以便我可以在 Xcode 4 中打开它们 一旦我编辑了它们 有没有办法将它们转换回NIB 一旦 nib 文件被扁平化和剥离 现在这是编译过程的默认部分 那么在 IB 中打开它就很困难 您可能想看看笔尖解锁
  • UTF-8 中的代理字符是什么?

    我有一个奇怪的验证程序 用于验证 utf 8 字符串是否是有效的主机名 PHP 中的 Zend Framework Hostname valdiator 它允许 IDN 国际化域名 它将每个子域与由其十六进制字节表示定义的字符集进行比较 两