簡體   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