Unicode 是否有一个类别或名称的字符,如智能引号和破折号,总是打破?

Unicode 是否有一个类别或名称的字符,如智能引号和破折号,总是打破?,unicode,utf-8,ascii,smart-quotes,Unicode,Utf 8,Ascii,Smart Quotes,许多人可能经历过将Word中的一些文本复制到网站表单或其他地方,而所有引号(')、双引号(“)和破折号(”)都会被弄乱。我相信这些引号被称为“智能引号”或“排版者引号”“,但我不知道短跑的名字。是否有包含这些字符的类别?还有吗 这一类别的显著特点:可通过普通的qwerty键盘访问,并且很容易在视觉上被误认为其ASCII等价物 这个问题似乎在处理同一个问题:另外,它们可能被称为“em破折号”至少有1114111个有效的Unicode代码点。我的美国标准键盘使那些介于1和127之间(以10为基数)的

许多人可能经历过将Word中的一些文本复制到网站表单或其他地方,而所有引号(')、双引号(“)和破折号(”)都会被弄乱。我相信这些引号被称为“智能引号”或“排版者引号”“,但我不知道短跑的名字。是否有包含这些字符的类别?还有吗

这一类别的显著特点:可通过普通的qwerty键盘访问,并且很容易在视觉上被误认为其ASCII等价物


这个问题似乎在处理同一个问题:另外,它们可能被称为“em破折号”

至少有1114111个有效的Unicode代码点。我的美国标准键盘使那些介于1和127之间(以10为基数)的键盘相当容易访问

当您尝试超出这个范围时,您将开始进入旧式地区或更现代的UTF8(或其他Unicode)代码点。这些代码点中的许多都可以通过世界上某个地方的键盘轻松访问。但是从你自己舒适的家里或办公室里,你会发现这110万中的一小部分可以通过键盘轻松访问

有一个名为
QMark
(简称)或
quote\u Mark
(简称)的Unicode属性,包括29个引号样式的代码点(UTF8,十六进制):0x0022、0x0027、0x00ab、0x00bb、0x2018、0x2019、0x201a、0x201b、0x201c、0x201d、0x201e、0x201f、0x2039、0x203a、0x300c、0x300d、0x300e、0x301d、0x301e,0x301f、0xfe41、0xfe42、0xfe43、0xfe44、0xff02、0xff07、0xff62和0xff63

下面是它们的外观(假设您的字体都支持):

“«»«»»»»»»»»»»»»»»»»»»»»»»»»»代码»

碰巧有一个Unicode属性
ASCII
,它包含128个介于0和127之间的代码点

我似乎找不到指定“非ASCII的所有内容”的Unicode属性,但您会知道它不在0..127范围内

还有一个
Hyphen
Unicode属性,它包含11个代码点:0x002d、0x00ad、0x058a、0x1806、0x2010、0x2011、0x2e17、0x30fb、0xfe63、0xff0d和0xff65。我不愿意将它们全部粘贴到这里,因为至少有两个代码点不会在我的终端中呈现。但是:

-᠆‐‑⸗・﹣-・

如您所见,有些属性与其他属性无法区分。当我在Perl 5.16中使用
Hyphen
属性时,我收到一条警告,指出特定的Unicode属性已被弃用。我不知道这是针对Perl的,还是针对Unicode的

还有一个
破折号
属性包含27个代码点。我想你明白了,所以我不会在这里列举它们……还有另一个名为
破折号标点
,包含23个代码点。请注意,许多代码点可以由多个Unicode属性分类,因此
连字符和
破折号
,而且
破折号
破折号标点
之间可能有更多的重叠——我不知道,也没有检查过

我知道这无论如何都不是一个以Perl为中心的问题,但我发现Perl在这里有非常好的Unicode属性文档:

所以我猜这个问题的简短答案是“还有更多吗?”是的,大约还有110万

更新:关于这些讨厌的字符的名称……您必须区分代码点和标志符号。代码点是Unicode实体的明确表示,而标志符号是它的外观。不同的字体可能实现不同的标志符号。那么在一种字体中相同,在另一种字体中可能看起来有点不同。开始考虑Unicode代码点及其关联的全名具有语义含义,而字形是简单的图形(不可靠)表示

更新2:在某些编程语言中(特别是Perl,但可能还有其他语言)您可以使用集合逻辑创建自定义字符类。在Perl中,这些字符类被称为,并在
perldoc perlrecharclass
中讨论。如果要匹配所有不在ASCII范围内的引号,可以使用以下子表达式:

(?[\p{QMark}-\p{ASCII}])
上面的子表达式创建了一个字符类,该类匹配所有类似引号的标记,不包括来自ASCII范围的标记。这是Perl 5.18版中引入的一个特性“在2019年添加,Perl 5.18在2013年发布,该功能已经提供了大约四年。不幸的是,我没有发现任何迹象表明它已经进入了Perl之外的PCRE库

尽管它已经存在了四年,但这个特性(从Perl5.28开始)仍然标记为“实验性”。因此,要使用它,您应该在使用它的范围中添加以下pragma:

no warnings qw(experimental::regex_sets);

这将压制实验警告。如果在不久的将来发布的Perl中取消这一警告,我不会感到惊讶。

您是否在问,Unicode属性会描述所有可以用普通键盘访问的字符,并且在视觉上可能会被误认为ASCII等效字符?我认为这会产生主观的答案,因为世界各地的键盘不同。我想我的可能没有任何非ASCII键。或者你是在特别询问什么Unicode属性可以识别“类似引号的字符”?此外,如果开发人员对这些peksy字符有一个术语,我应该通过谷歌搜索找到一个已经实现此过滤器的解决方案。这些字符“可以通过普通qwerty键盘访问”将取决于您使用的应用程序。在MS Word中,当我键入双引号字符时