【发布时间】:2012-10-05 19:50:48
【问题描述】:
问题:按值排列的 Unicode 扩展符号的正确顺序是什么?
如果我对 Unicode 字符列表进行 excel 排序,则顺序与我使用 excel "=code()" 并按这些值排序时不同。目的是我想测量字符之间的距离,例如 a-b = 1 和 &-% = 1;当使用 excel 排序功能进行排序时,在三个内排序的两个字符的值似乎在 134 之外。
此外,一些字符符号在 excel 中是空白的,并且有几个用“查找”找到了两次,并且是两个不同的符号 - 有几个根本找不到。请解释这些“特殊”字符的详细信息。
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 留下一个空白。
在 c++ vs2008 中使用 std 库和#include 不处理以下 Unicode 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 的几个特定子集之外的字符距离是不正确的。
【问题讨论】:
-
你想达到什么目的?这对我来说就像一个XY problem
-
对任意 Unicode 数据进行排序是一个极其复杂的问题。由于某些语言中的奇怪排序规则(例如,在西班牙语中,ch 和 ll 都被视为一个字母,因此它不像对 ASCII 字符的数值进行排序那么简单用于分类目的)。您真正想要解决的问题是什么?
-
字符集中代码点的顺序通常是called
collation,而不是编辑距离(例如Hamming 或Levenshtein) -
术语“整理”是一个很好的起点。因此,我需要了解排序规则以允许将字符距离测量为汉明算法的函数,该算法包括扩展的 Unicode 字符集的全部范围。感谢您提供更多信息。
-
响应'several are found两次';值得注意的是,某些 Unicode '字形' 可以由多个 Unicode '码点' 表示,甚至可以表示为 多个 码点的组合。例如,大多数欧洲重音字符可以有自己的代码点,但也可以通过将非重音字符的代码点与表示“添加重音”的特殊代码点组合生成。另一个例子是欧米茄字形,它由希腊字母代码点和“数学符号”代码点表示。
标签: c++ excel unicode char collation