0

Autocad DXF 和 DWG 文件使用 unicode 字符串来识别图层。我已经通过实验确定 Autocad 必须采用某种大小写折叠和规范化(Autocad 认为 'groß' 和 'GROSS' 是相同的,而 'Am\U+00e9lie' 和 'Ame\U+0301lie' 是相同的)。我想在我自己的软件中知道根据 Autocad 两个图层名称是否相同。Unicode 标准中的默认无大小写匹配算法似乎给了我正确的答案,但我想确定一下。

  1. 任何人都可以确认默认无大小写匹配是 Autocad 使用的算法吗?或者,如果不是这样。

  2. 是否有测试输入可以用来区分不同的无案例匹配算法?

4

2 回答 2

1

我没有明确的答案,但Unicode 标准定义了四种无大小写匹配算法:

  1. 默认无大小写匹配 (D144):这仅使用(完整)大小写折叠,但不使用规范化。既然您提到了这一点Am\U+00e9lieAme\U+0301lie匹配,则绝对可以排除此变体。

  2. 规范无外壳匹配 (D145):除了外壳折叠外,它还使用(标准 NFC 或 NFD)标准化。

  3. 兼容性无大小写匹配 (D146):除了大小写折叠外,它还使用“兼容性”(NFKC 或 NFKD)规范化形式。

  4. 标识符无大小写匹配 (D147):与兼容性无大小写匹配类似,但也忽略默认可忽略字符。

因此,我建议进行以下附加测试:

  • 如果\U+0133(LATIN SMALL LIGATURE IJ with a compatible mapping) 和ij匹配,那么 Autocad 似乎使用了兼容性规范化和规范无大小写匹配 (D145) 可以被排除。

  • 如果A\U+00adB(SOFT HYPHEN with property Default_Ignorable_Code_Point) 并AB匹配,那么 Autocad 似乎会忽略 Default Ignorable 字符,并且可以排除兼容性无大小写匹配 (D146)。

Autocad 当然有可能不使用任何一种 Unicode 算法,但上面的测试应该有助于缩小范围。请考虑发布任何其他发现以帮助其他用户。

于 2018-02-12T12:49:19.900 回答
0

我截获了 api 调用,发现 Windows 上的 Autocad 2018CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE | SORT_STRINGSORT, ...)用于检查图层名称是否相等。

于 2018-02-21T23:07:59.513 回答