2010-08-04 40 views

回答

11

正如其他評論者所指出的,Unicode normalisation(「兼容性字符」)在這裏不會幫助你,因爲你不是在尋找官方等價物,而是在字形(字母形狀)方面的相似之處。 (但是,鏈接的Unicode技術報告仍然值得一讀,因爲它寫得非常好。)

如果我是你,爲了讓你自己組裝一系列字符的繁瑣工作,我會搜索資源homograph attacks:這是一種通過顯示包含域名的網址惡意誤導網絡用戶的方法,其中一些字母已被視覺上相似的字母替換。關於安全性的另一個Unicode Technical Report包含有關該問題的部分。還有 - 這可能是你最需要的 - "confusables" table。這裏有另一篇主要標點符號的文章,其中一些是ASCII,它們在non-ASCII code tables中有相似的對應物。

我所希望的是,你並沒有提出這個問題來構建這樣的攻擊。

+0

感謝所有的好鏈接和解釋。我實際上試圖防止這種攻擊。 :-)我想我會用關鍵詞「同形異義詞攻擊」找到更多的東西。 – DrDol 2010-08-04 22:34:33

+0

很高興聽到:)。是的,那是你需要的關鍵字!我編輯了一個鏈接(它指向一個過時的版本)。 – chryss 2010-08-04 22:40:17

+0

合法使用:對於國際化測試,我有一個使用類似外觀的字符生成假外文文本的工具。講英語的測試人員可以閱讀「外來」文本,但他們也可以清楚地知道它不是硬編碼的英文。雖然如果unicode字符非常相似以至於無法區分差異,則它不起作用。我主要做的是爲元音添加重音符號。 – Kip 2015-04-02 15:14:03

-1

請參閱Unicode數據庫:http://www.unicode.org/Public/UNIDATA/UnicodeData.txt

每一行描述一個Unicode caharacter,例如:

1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;; 

如果有該符號任何類似的(兼容)字符,它會出現在條目的<compat>領域。在本例中,0061(ASCII a)與LATIN SMALL LETTER A WITH RIGHT HALF RING Unicode字符兼容。

至於你的性格,該條目是

0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 

,正如你所看到的,不指定兼容性角色。

+0

兼容性字段描述的字符序列與所討論的字符意思相同。在你的例子中,兼容序列是'U + 0061'(字母'a'),後面是'U + 02BE'('右半環'修飾符)。對於來自不同字母的字符來說,要有兼容性序列是非常不尋常的 - 這會使得OP在沒有更多信息的情況下試圖做的事情變得不可能。 – cHao 2010-08-04 11:38:04

+0

OP聲明'類似於ASCII字符',不是確切的。如果你正在尋找一個右半環的'a',如果沒有其他可用的東西,你可以解決ASCII'a'。 – adamk 2010-08-04 12:10:43

+0

同意 - 在這種情況下。但是,如果你正在尋找一個類似於西裏爾字母的ASCII字符,這是OP所使用的例子,這將不起作用。 – cHao 2010-08-04 12:35:53