有人知道一種簡單的方法來查找Unicode中與ASCII字符相似的字符。一個例子是「CYRILLIC SMALL LETTER DZE(s)」。我想要搜索並替換相似的字符。相似的,我的意思是人類可讀。你看不到它有什麼不同。在Unicode中查找類似的ASCII字符
回答
正如其他評論者所指出的,Unicode normalisation(「兼容性字符」)在這裏不會幫助你,因爲你不是在尋找官方等價物,而是在字形(字母形狀)方面的相似之處。 (但是,鏈接的Unicode技術報告仍然值得一讀,因爲它寫得非常好。)
如果我是你,爲了讓你自己組裝一系列字符的繁瑣工作,我會搜索資源homograph attacks:這是一種通過顯示包含域名的網址惡意誤導網絡用戶的方法,其中一些字母已被視覺上相似的字母替換。關於安全性的另一個Unicode Technical Report包含有關該問題的部分。還有 - 這可能是你最需要的 - "confusables" table。這裏有另一篇主要標點符號的文章,其中一些是ASCII,它們在non-ASCII code tables中有相似的對應物。
我所希望的是,你並沒有提出這個問題來構建這樣的攻擊。
請參閱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
,正如你所看到的,不指定兼容性角色。
兼容性字段描述的字符序列與所討論的字符意思相同。在你的例子中,兼容序列是'U + 0061'(字母'a'),後面是'U + 02BE'('右半環'修飾符)。對於來自不同字母的字符來說,要有兼容性序列是非常不尋常的 - 這會使得OP在沒有更多信息的情況下試圖做的事情變得不可能。 – cHao 2010-08-04 11:38:04
OP聲明'類似於ASCII字符',不是確切的。如果你正在尋找一個右半環的'a',如果沒有其他可用的東西,你可以解決ASCII'a'。 – adamk 2010-08-04 12:10:43
同意 - 在這種情況下。但是,如果你正在尋找一個類似於西裏爾字母的ASCII字符,這是OP所使用的例子,這將不起作用。 – cHao 2010-08-04 12:35:53
- 1. C++ 11 - Unicode字符串 - 查找是否包含非ASCII字符
- 2. 查找類似字符串
- 3. 查找Unicode字符
- 4. Python - 查找unicode/ascii問題
- 5. 奇怪的ASCII/Unicode字符
- 6. 文字中的非ASCII,非Unicode字符
- 7. 在字符串中查找ascii號碼
- 8. mySql - 在html中查找非Ascii字符
- 9. 查找非ASCII字符的字符串
- 10. 查找ASCII字符範圍
- 11. 將Unicode字符轉換爲ASCII(.NET)中最接近的(最相似的)字符
- 12. 分割ascii/unicode字符串
- 13. 如何在mysql中查找Unicode字符?
- 14. 在.Net中查找Unicode字符名稱
- 15. MySQL查找類似的字符串
- 16. Django的ASCII碼unicode字符串的近似匹配當量
- 17. 處理ASCII文件中的Unicode字符?
- 18. DB2 SQL查詢來查找字符串中的非ASCII字符
- 19. 操縱Unicode和ASCII字符集在C#
- 20. 如何在C#中查找Unicode字符的雙向字符類型?
- 21. 查找在Heroku上託管的postgresql中的類似字符串
- 22. 慢響應在Sybase查詢的unicode(非ASCII)字符時
- 23. 在PHP中查找頂部類似的字符串?
- 24. 在NSArray中查找類似的字符串
- 25. 如何在Javascript中查找類似的字符串?
- 26. 如何查找字符串中字符的ascii值?
- 27. 計算ASCII和Unicode混合字符串中的字符數
- 28. 檢測unicode字符串中的非ASCII字符
- 29. 用Python中的unicode字符串替換非ASCII字符
- 30. 將Unicode字符自動映射到類似的EBCDIC 1047字符
感謝所有的好鏈接和解釋。我實際上試圖防止這種攻擊。 :-)我想我會用關鍵詞「同形異義詞攻擊」找到更多的東西。 – DrDol 2010-08-04 22:34:33
很高興聽到:)。是的,那是你需要的關鍵字!我編輯了一個鏈接(它指向一個過時的版本)。 – chryss 2010-08-04 22:40:17
合法使用:對於國際化測試,我有一個使用類似外觀的字符生成假外文文本的工具。講英語的測試人員可以閱讀「外來」文本,但他們也可以清楚地知道它不是硬編碼的英文。雖然如果unicode字符非常相似以至於無法區分差異,則它不起作用。我主要做的是爲元音添加重音符號。 – Kip 2015-04-02 15:14:03