问题标签 [uca]

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.

0 投票
1 回答
808 浏览

delphi - Delphi 是否有 Unicode 排序算法 (UCA) 代码?

Unicode 技术标准 #10 (UCA) 下的排序规则,这与 Unicode 兼容是不同的,如果您对此感到疑惑,它不仅意味着排序/排序,还意味着比较,“字符串 1 是否等于字符串 2”的问题”。有时,出于排序和比较的目的,两个字符串中的值不同的代码点被认为是相等的,至少从 Perl 标准库的角度讨论的这篇博客文章暗示了这一点。

我想知道的是,(a)Delphi XE2 是否已经完全实现了整个Unicode Collat​​ion Spec,并且(b)如果没有,第三方库会这样做吗?

示例代码:

根据 Unicode 归类规范,Unicode 归类应考虑所有上述代码点的等价比较。从二进制的角度来看,这没有任何意义,所以我很高兴 Delphi 中的 CompareStr 和 perl 中的 cmp(来自链接的文章)都没有受到 Unicode 故障的污染,但是如果你想做一个符合 unicode 的怎么办Delphi 中的排序规则,比如 perl Unicode::Collat​​ion 库?如何?

更新 AnsiCompareStr将调用 Win32CompareString并会处理一些类似于上述区域设置的特定情况,并且通过在互联网上阅读,经典的 Windows unicode 整理行为和 UCA 正在缓慢但不完全融合,UCA 似乎是一个被改变的人它更像是 Windows 排序规则。

0 投票
1 回答
184 浏览

unicode - 在 Unicode Collat​​ion Algorithm 中如何处理组合字符?

我维护了一个名为pyuca的Unicode 排序算法的开源纯 Python 实现。

虽然它满足了我对古希腊文本进行排序的需求(并且似乎满足了许多其他人的需求),但我希望通过使其通过整套官方一致性测试来提高其对罕见情况的覆盖率.

但是,有 1,869 个测试(略高于 1%)失败了。第一个失败是0332 0334测试文件建议应该获得排序键| 004A 0021 | 0002 0002 |

然而pyuca形成了排序键| 0021 004A | 0002 0002 |

起初我认为这可能是由于缺乏对非起始字符的支持(最新规范中算法的 S2.1.1 到 S2.1.3)。但是,我随后对这部分的实现并没有改变排序键,并且在纸上手动处理算法也无法触发该部分,这让我想知道我是否只是遗漏了一些东西。

算法中的相关步骤是:

S2.1.1如果 S 后面有 non-starter,则处理每个 non-starter C。
S2.1.2如果 C 没有被 S 阻塞,则查找 S + C 是否在表中匹配。
S2.1.3如果匹配,则将 S 替换为 S + C,并删除 C。

关键短语是“如果有匹配”。在上面提到的失败的测试中,没有匹配0332 0334项,因此这部分算法无法解释为什么排序键的顺序与我的实现产生的顺序不同。

谁能解释 UCA 的哪一部分会像测试文件所暗示的那样形成排序键?

0 投票
1 回答
371 浏览

unicode - 反转 Unicode 字符串排序规则键

我有一个索引,它以原始形式和整理形式存储用于搜索的文本字符串(整理形式用于搜索索引,原始形式显示在结果中)。

排序是通过 ICU4C 实现完成的,它按照Unicode Collat​​ion Algorithm中的定义工作。我使用排序键,通常只存储主要强度(无重音、小写/大写、代码页等)。

出于调试目的,是否有任何方法可以反转排序规则以检索类似于原始字符串的人类可读字符串? 显然这是一个有损的过程,但是将 'a' 的排序键转换为显示 ASCII 'a' 字符就足够了。希望有一种标准的方法可以做到这一点,而不必自己实现从二进制排序键到可打印的 unicode 字符的转换。最佳情况下,该解决方案将在 C/C++ 中实现。

提前致谢。

0 投票
3 回答
1499 浏览

icu - unicode 排序规则背后的理论是什么

unicode排序背后的理论是什么?我了解它是如何工作的,但我不明白他们为什么决定使用此标准进行排序排序。

似乎当您有两个要比较的字符串时,例如使用 ucol_strcollliter() :

然后,假设我这两个字符串是:

在“Secondary”排序规则下,string1 应该排在 string2 之前。其中 string1 和 string2 是根据它们的次要强度进行比较的。

如果您有尾随空格,例如:

那么重音 hello (string2) 将放在 string1 之前。并且,两者都在它们的主要重量上进行比较。

为什么unicode 排序算法会考虑尾随空格?

这背后有什么原因吗?

0 投票
0 回答
367 浏览

algorithm - 实现 unicode 排序算法的示例代码

我的项目中有以下要求。我需要根据客户端提供的字符顺序对字符串进行排序。

例如:

用户提供的订单:d,a,A,D,z,p,P,Z

所以如果我们有一些字符串,比如AaP,aAp,PpZ,pPz.

排序后的输出应aAp,AaP,pPz,PpZ as a>A>p>P根据用户给出的初始顺序。

现在我正在考虑选择Unicode Collation algorithmhttp://unicode.org/reports/tr10/)来实现上述要求。

有人可以建议我用于以下几件事的数据结构以获得更好的性能。

1.)将字符的ascii值映射到用户的给定顺序 - 我正在考虑使用map。但它可以是O(logn)进行访问。我不能使用hashmap,因为我在c ++中编码。

2.)在生成排序键后,可以使用哪些排序技术来比较排序键。这里可以使用基数排序之类的东西吗?

请分享你的想法..

虽然我的项目不需要以下要求,但我只想知道

如上面关于 Unicode 排序算法的链接中提到的,排序元素是如何从 Unicode 值或 ascii 值实际创建的?

0 投票
0 回答
106 浏览

mysql - 自定义 MySQL 排序规则不起作用

我的目标是对一些数字进行排序,与少数字符相同。

IE:

4 种与 A 或 a
相同 3 种与 E 或 e 相同

为什么这不起作用?

我已将以下内容添加到/usr/share/mysql/charsets/Index.xml

我也试过:

这是我的测试结果:

0 投票
1 回答
68 浏览

collation - icu (uca) 支持弗里斯兰语整理

在弗里斯兰语中,y 是和 i 并在它之后排序,请参阅http://download.mimer.com/pub/developer/charts/frisian.htm

我尝试使用 xquery 处理器 saxonica 使用弗里斯兰语语言代码或排序规则对数据进行排序,请参阅http://saxonica.com/html/documentation/extensibility/config-extend/collat ​​ion/

到目前为止没有运气,尝试了几种设置组合,似乎没有任何效果,以及在类路径上使用最新的 icu-j 进行了尝试。icu 确实支持弗里斯兰语,尽管我怀疑排序是否正确。

有没有人有这方面的经验,可以给我一些指示?

再见,爱德华

0 投票
1 回答
26 浏览

mysql - 如何在 MySQL FULLTEXT 索引字段中使某些标点字符可索引

我在 MySQL 8.0 上有一个带有字符集 utf8mb4 的全文索引字段

我需要能够搜索“km/h”或“AB”之类的查询,但使用当前的字符集定义,斜杠和破折号被定义为标点符号,因此不被全文索引索引。

查看 MySQL文档,似乎我有这种可能性,(鉴于 utf8 对我来说是一个强烈的要求):

  1. 使用 LDML 语法的基于 UCA 的 Unicode 字符集排序规则
  2. 引入新字符集并重新编译 MySQL

我宁愿避免重新编译,因为它会给维护带来复杂性。

我无法制定出 unicode 文档来创建排序规则。有人可以帮我在 LDML 中定义一个特定的排序规则,以便将破折号和斜杠视为常规字符吗?