繁体   English   中英

unicode char值

[英]unicode char value

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

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

另外,有些字符符号在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的右半部分留出空白。

以下Unicodes在带有std库和#include 9、10、13、26、34、44的c ++ vs2008中无法处理

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

如果这些代码遵循更合理的逻辑,并且从1到255而不出现打or或跳过和反转,并且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的几个特定子集之外的char距离。

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

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

空白值可能对应于您没有任何字体覆盖范围的字形。 一些系统使用所谓的“ Unicode字体”,其中每个脚本所需的字形都占很大比例。 当当前字体没有必要的字形时,Windows倾向于动态切换字体。 两种方法都没有必要的所有标志符号。 另外,某些Unicode值未编码为可见的字形(例如,Unicode中有许多不同类型的空格),某些值的行为更像ASCII样式的控件代码(例如,段落分隔符或biddi控件),而某些值仅当它们与另一个字符结合时才有意义,例如许多“结合”的重音符号。

因此,您将不会满意。 也许,如果您提供了有关您最终想要做什么的更多信息,我们可能会建议采用其他方法。

我认为您不能在Excel中做您想做的事而又不会明显限制您的方法。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM