簡體   English   中英

從C中的UTF8字符串中刪除變音符號

[英]Removing diacritic symbols from UTF8 string in C

我正在編寫一個C程序來搜索數據庫中的大量UTF-8字符串。 這些字符串中的某些包含帶有教義的英語字符,例如重音符號等。搜索字符串是由用戶輸入的,因此很可能不包含此類字符。 有沒有一種方法(函數,庫等)可以從字符串中刪除這些字符,或者僅執行不區分教義的搜索? 例如,如果用戶輸入搜索字符串“ motor”,則它應與字符串“motörhead”匹配。

我的第一個嘗試是手動剝離此處描述的組合教學修飾符:

http://en.wikipedia.org/wiki/Combining_character

在某些情況下,這種方法有效,但事實證明,其中許多字符也具有特定的unicode值。 例如,上面的字符“ö”可以由“ o”表示,后跟組合教學法U + 0308,但也可以由單個Unicode字符U + 00F6表示,而我的方法僅過濾前者。

我還研究了iconv,它可以從UTF8轉換為ASCII。 但是,我可能希望將來將程序本地化,這無疑會導致非英語字符的語言出現問題。 有沒有辦法我可以簡單地剝離/轉換這些重音符號?

編輯:刪除問題標題中的錯字。

轉換為可分解的規范化之一 (可能是NFD,但甚至可能需要NFKD),這會使所有變音符號組合成可以剝離的字符。

您將為此需要一個庫。 我聽到有關ICU的好消息。

使用ICU ,在強度為PRIMARY(L1)的“根”上創建整理程序(僅使用基本字母,僅關心'o'並忽略'ö'),然后可以使用ICU的搜索功能進行匹配。 有一個新的功能搜索整理器 ,它將提供為此情況設計的特殊整理器,但是“主要力量”將處理此特定情況。

示例: “已整理”部分中的“ motor ==mötor”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM