问题标签 [noncharacter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 一个有效的 Unicode 字符串可以包含 FFFF 吗?Java/CharacterIterator 坏了吗?
这是文档的摘录java.text.CharacterIterator
:
这
interface
定义了文本双向迭代的协议。迭代器迭代有界的字符序列。[...] 方法previous()
和next()
用于迭代。它们返回DONE
if [...],表示迭代器已到达序列的末尾。
static final char DONE
:当迭代器到达文本的结尾或开头时返回的常量。该值是不应出现在任何有效 Unicode 字符串中\uFFFF
的“非字符”值。
斜体部分是我难以理解的部分,因为从我的测试来看,它看起来像 JavaString
肯定可以包含\uFFFF
,并且似乎没有任何问题,除非显然使用规定的CharacterIterator
遍历习语会中断,因为误报(例如,当它没有真正“完成”时next()
返回)。'\uFFFF' == DONE
这是一个说明“问题”的片段(另请参见 ideone.com):
那么这里发生了什么?
- 规定的遍历习语是否“损坏”,因为它对 做出了错误的假设
\uFFFF
? - 实现是否
StringCharacterIterator
“损坏”,因为它没有例如if 实际上在throw
有效的 Unicode 字符串中是被禁止的?IllegalArgumentException
\uFFFF
- 有效的 Unicode 字符串不应该包含真的是真的
\uFFFF
吗? - 如果这是真的,那么 Java 是否因(在大多数情况下)允许
String
包含而违反 Unicode 规范而被“破坏”\uFFFF
?
unicode - 非字符 U+FDD0 到 U+FDEF 的用途是什么?
U+FFFE 必须是非字符才能使字节顺序标记起作用。
U+FFFF 在Unicode 标准中被描述为“作为哨兵用于内部目的”。说得通。
但我无法弄清楚,Unicode 标准也没有真正解释,为什么非字符集在“阿拉伯语表示形式-A”中包含一些随机块。这些是干什么用的?(除了蛇怪的眼睛?)
html - 为什么某些字符在 HTML5 规范中被禁止?
根据HTML5 规范(就在表格之后),禁止使用以下字符:
否则,返回其代码点为该数字的 Unicode 字符的字符标记。Additionally, if the number is in the range 0x0001 to 0x0008, 0x000D to 0x001F, 0x007F to 0x009F, 0xFDD0 to 0xFDEF, or is one of 0x000B, 0xFFFE, 0xFFFF, 0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF , 0x5FFFE, 0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, or 0x10FFFF,那么这是一个解析错误。
这种排斥背后的原因或动机是什么?
swift - 检测非字符 Unicode 字符
我正在开发一个应用程序,该应用程序最终会读取任意且不可信的 Unicode 字符并将其打印到屏幕上。
使用 Unicode 字符串破坏破坏的方法有很多,我希望我的程序能够正确处理“危险”字符串。例如,RTL 覆盖字符将使字符串看起来像是倒置的。
由于受众主要是程序员,我的解决方案是,首先,获取字符串的 C 类规范形式,然后将任何不是可打印字符本身的内容替换为 Unicode 代码点\uXXXXXX
。(目的不是要对字符串进行完全准确的表示,而是要有一个很好的表示。完整的字符串数据仍然可用。)
那么,我的问题是确定什么是实际可打印字符,什么是不可打印字符。Swift 有一个Character
类,但与 Java 的Character
类相反,Swift 似乎没有任何方法来找出字符的分类。
我怎么能执行那个计划?还有什么我应该考虑的吗?
unicode - 哪些非负整数在 UCS 中没有分配字符?
由Unicode 字符编码模型定义的编码字符集将字符映射到非负整数(例如,拉丁小写字母 A到 97,由传统的 ASCII 和 UCS 组成)。
注意:字符和抽象字符之间存在区别:后者更接近于我们的字符概念,而第一个术语是编码字符集上下文中的概念。一些抽象字符由多个字符表示。维基百科上的 Unicode 文章引用了一个例子:
例如,一个拉丁文小写字母“i”,上面有一个ogonek,上面有一个点,还有一个重音[一个抽象字符],在立陶宛语中是必需的,用字符序列U+012F、U+0307、U+来表示0301.
UCS(Universal Coded Character Set)是国际标准ISO/IEC 10646定义的编码字符集,可以通过这个官方链接下载作为参考。
手头的任务是判断一个给定的非负整数是否被UCS(通用编码字符集)映射到一个字符。
让我们首先考虑未分配字符的非负整数,即使它们实际上是由 UCS 保留的。UCS(第 6.3.1 节,分类,表 1;链接文档的第 19 页)根据对应的基本类型列出了三种可能性:
- 代理(范围 D800–DFFF)
非字符(范围 FDD0–FDEF 加上任何以值 FFFE 或 FFFF 结尾的代码点)
Unicode 标准对非字符的定义如下:
非字符是永久保留的代码点,永远不会分配给它们的字符。
此页面更准确地列出了非字符。
- 保留(我还没有找到属于这个类别的非负整数)
另一方面,基本类型为以下任何一种的代码点:
- 形象的
- 格式
- 控制
- 私人使用
分配给字符。然而,这是可以讨论的。例如,是否应该认为私人使用代码点实际上被分配了任何字符?非常 UCS(第 6.3.5 节,私人使用字符;链接文档的第 20 页)将它们定义为:
本国际标准不以任何方式限制私人使用字符。专用字符可用于提供用户定义的字符。
此外,我想知道 UCS 映射或保留的非负整数的范围。最大值是多少?在某些页面中,我发现 UCS 映射的整个非负整数范围是 – 大概 – 0–0x10FFFF。这是真的?
理想情况下,这些信息将以可以构建算法的机器可读格式公开提供。是偶然的吗?
为清楚起见:我需要的是一个函数,它以非负整数作为参数并返回它是否被 UCS 映射到字符。此外,我更希望它基于官方的、机器可读的信息。要回答这个问题,只要指出一个我可以自己构建函数的资源就足够了。
unicode - 为什么补充 PUA 的最后两点被排除在外?
补充 PUA(F0000-FFFFD 和 100000 10FFFD)通过将 FFFFE、FFFFF、10FFFE 和 10FFFF 定义为非字符来明确排除它们。为什么这样做?没有这个,它们将是不错的 65536 点块。
unicode - Unicode 非字符
有没有很好的资源可以找到每个位面的最后两个字符,尤其是位面 3-13?
显然0xFFFE
and 和 and一样0xFFFF
是非字符,但是我找不到关于每个平面的最后一个字符在哪里的完整列表,因为我不知道每个平面的结束位置。0x10FFFE
0x10FFFF
在 Unicodes 网站上,它指的是每个平面的最后两个字符是非字符。
swift - 哪个 unicode 代码可以安全地用作保留值?
背景
我正在编写一个基于 DFA 的正则表达式解析器,出于性能原因,我需要使用字典[Unicode.Scalar : State]
来映射下一个状态。现在我需要一堆特殊的 unicode 值来表示特殊的字符表达式,如.
, \w
, \d
...
我的问题
哪些 unicode 值可以安全地用于此目的?
我正在使用U+0000
for .
,但我现在需要更多。我检查了 unicode 文档,Noncharacters似乎很有希望,但很快,那些被认为是无效的 unicode。例如,下面的代码给了我一个编译器错误Invalid unicode scalar
。
python - 从 utf8 中去除无效和非字符
我正在加载一些数据,对其进行处理,然后将数据发送到一个应用程序(足够公平),它不允许无效noncharacter
的utf8以及无效和特殊字符U+FDD0
通过。U+FDEF
U+FFFE
U+FFFF
我的原始数据超出了我的控制范围,其中一些恰好包含我想要清除的无效字符。
但是,我的 python 代码仍在向应用程序发送无效的 utf8,因为它不会忽略非字符和其他无效字符。
例如
b'\xef\xbf\xbf'.decode('utf-8', 'ignore')
返回'\uffff'
而不是忽略无效字符,并且encode
具有相同的行为。
我首先使用 U+FFFE 进行了调试,它有一个与 BOM 相关的 wontfix 错误。https://bugs.python.org/issue765036
然后我发现这个庞大的电子邮件列表线程 ( https://bugs.python.org/issue12729 ) 声称可以发出非字符,因为应用程序可能希望保留它们以供内部使用。
但是,是否有任何不错的 python 方法可以在没有这些非字符和其他无效字符的情况下发出“transmitabble”utf8 U+FFFF
?