1

问题:按值排列的 Unicode 扩展符号的正确顺序是什么?

如果我对 Unicode 字符列表进行 excel 排序,则顺序与我使用 excel“=code()”并按这些值排序时不同。目的是我想测量字符之间的距离,例如 ab = 1 和 &-% = 1; 当使用 excel 排序功能进行排序时,在三个内排序的两个字符的值似乎在 134 之外。

此外,一些 char 符号在 excel 中是空白的,有几个用“find”找到了两次,是两个不同的符号 - 根本没有找到几个。请解释这些“特殊”字符的详细信息。

http://en.wikipedia.org/wiki/List_of_Unicode_characters

示例代码:

int charDist = abs(alpha[index] - code[0]);

编辑:为了找出 c++ vs2008 中的 UNICODE 值,我运行每个代码作为从代码 1 到代码 255 与代码 1 的比较

cout << mem << " code " << key << " is " << abs(key[0] - '') << " from " << endl;

括号里是一个黑色的笑脸,这个网站没有字体,但是命令窗口有,在vs2008中看起来像半张贴| 与 T 的右半部分。 Excel 留下空白。

以下 Unicode 在 c++ vs2008 中不使用 std 库和 #include 9、10、13、26、34、44 处理,

而且,代码 1 到 127 的数字“距离”是正确的,但在 128 处,距离会跳过一个额外的距离,并且由于某种原因更远。然后从 128 到 255,距离反转并变得更近;255 距离 1 '' 2

如果这些遵循更合乎逻辑的东西并且只有 1 到 255 没有打嗝或跳过和反转,并且 255-1 = 254 但是嘿,我知道什么,那就太好了。

EDIT2:我发现它 - 没有绝对 - UNIFORMAT 的排序规则是 128 到 255,然后是 1 到 127,并产生 1 到 255,其中 9、10、13、26、34、44 的 6 个跳过是垃圾。这并不直观。在新的顺序 128->255,1->127 中,从 127 到 128 的奇怪跳转更加清晰,这是因为没有 0,所以在 255 和 1 之间缺少值。

解决方案:使用每个符号的值制作我自己的哈希表,并且不要依赖 c++ std 库或 vs2008 来提供 UNIFORMAT 值,因为它们对于测量 UNIFORMAT 的几个特定子集之外的字符距离是不正确的。

4

2 回答 2

4

Unicode 没有定义的排序(或整理)顺序。当 Excel 排序时,它使用基于当前所选语言的表格。例如,在英语模式下使用 Excel 的人可能会得到与在葡萄牙语模式下使用 Excel 不同的排序结果。

还有标准化的问题。使用 Unicode,一个“字符”不一定对应一个值。一些字符可以用不同的方式表示。例如,大写的欧米茄可以编码为希腊字母或表示电阻单位的符号。在某些语言中,单个字符可能由多个连续值组成。

空白值可能对应于您没有任何字体覆盖的字形。一些系统使用所谓的“Unicode 字体”,其中包含每个脚本所需的大部分字形。当当前字体没有必要的字形时,Windows 倾向于即时切换字体。这两种方法都不需要所有字形。此外,一些 Unicode 值不编码为可见字形(例如,Unicode 中有许多不同类型的空格),一些值更像 ASCII 样式的控件代码(例如,段落分隔符或双向控件),还有一些值只有当它们与另一个字符组合时才有意义,就像许多“组合”口音一样。

所以没有一个你会满意的答案。也许如果你提供更多关于你最终想要做什么的信息,我们可以建议一种不同的方法。

于 2012-10-05T20:16:05.753 回答
1

我不认为你可以在不显着限制你的方法的情况下在 Excel 中做你想做的事情。

通过实验,Code 函数永远不会返回高于 255 的值。如果您使用无法通过此 VBA 代码生成的任何 unicode 文本,它将被解释为问号 (?) 或 63。

For x = 1 To 255
    Cells(x, 1).Value = Chr(x)
Next

您应该能够使用代码确定差异。但如果该字符不属于该领域,则您需要离开 Excel,因为即使是 VBA 也会将任何其他 Unicode 字符转换为问号 (?) 或 63。

于 2012-10-05T20:19:47.567 回答