gpt4 book ai didi

Java - 什么是字符、代码点和代理?他们之间有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 20:38:42 25 4
gpt4 key购买 nike

我试图找到对术语“字符”、“代码点”和“代理”的解释,虽然这些术语不限于 Java,但如果有任何特定于语言的差异,我想与 Java 相关的解释。

我发现了一些关于字符和代码点之间差异的信息,字符是为人类用户显示的内容,代码点是编码该特定字符的值,但我不知道代理项。什么是代理项,它们与字符和代码点有何不同?我对字符和代码点有正确的定义吗?

another thread关于将字符串作为字符数组单步执行,提示此问题的具体注释是“请注意,此技术为您提供字符,而不是代码点,这意味着您可能会得到代理项。”我不太明白,与其对一个 5 年前的问题发表一长串评论,我认为最好在一个新问题中要求澄清。

最佳答案

要在计算机中表示文本,您必须解决两件事:首先,您必须将符号映射到数字,然后,您必须用字节表示这些数字的序列。

一个 Code point是一个标识符号的数字。为符号分配数字的两个众所周知的标准是 ASCII 和 Unicode。 ASCII 定义了 128 个符号。 Unicode 目前定义了 109384 个符号,远远超过 216

此外,ASCII 指定数字序列以每个数字一个字节表示,而 Unicode 指定几种可能性,例如 UTF-8、UTF-16 和 UTF-32。

当您尝试使用每个字符使用的位数少于表示所有可能值所需的位数时(例如使用 16 位的 UTF-16),您需要一些解决方法。

因此,Surrogates是 16 位值,表示不适合单个两字节值的符号。

Java 使用 UTF-16在内部表示文本。

具体来说,char(字符)是一个包含 UTF-16 值的无符号双字节值。

如果您想了解更多关于 Java 和 Unicode 的信息,我可以推荐这个时事通讯:Part 1 , Part 2

关于Java - 什么是字符、代码点和代理?他们之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23979676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com