2008-10-07 44 views
4

我有一個包含UTF-8字符的std :: string。
我想將字符串轉換爲與ASCII字符最相近的字符串。使用ICU庫的UTF-8到ASCII

例如:

羅茲=>羅茲
阿鬆桑=>阿鬆桑
的Schloß=>宮

不幸的是ICU庫是真的不直觀,我還沒有發現它的使用良好的文檔,所以學習使用它需要花費太多時間。我沒有時間。

有人可以舉一個例子說明如何做到這一點?
謝謝。

回答

3

我不知道重症監護病房,但ICONV做到了這一點,它很容易學習。它只有3-4個電話,你需要的是使用iconvctl()ICONV_SET_TRANSLITERATE標誌。

+0

的iconvctl功能似乎並沒有成爲標準的iconv實現的一部分。至少我正在使用的Linux系統沒有它。 – GetFree 2008-10-07 04:38:32

+0

iconv不是標準。它是一個圖書館。如果您沒有iconvctl,則表明您已損壞:http://www.gnu.org/software/libiconv/ – shoosh 2008-10-07 17:36:32

+0

查看此頁面的結尾處:http://www.gnu.org/software/libiconv/documentation /libiconv/iconvctl.3.html(「符合」部分) – GetFree 2008-10-07 19:26:01

0

這不是我擅長的領域,但是如果你沒有一個方便的庫來爲你輕鬆做到這一點,那麼你可能更好的是創建一個包含UTF的查找表/地圖-8 - > ASCII值。即。關鍵是UTF-8字符,值是字符的ASCII序列。

0

ß-> ss分解告訴我你想要兼容性分解。在ICU中,你需要class Normalizer。之後,你最終會得到像L'odz這樣的東西。 從這個字符串中,您可以簡單地刪除非ASCII字符。無需ICU,簡單的STL就可以做到。

3

試試這個, ucnv_convert( 「US-ASCII」, 「UTF-8」,targer,的targetSize,來源,sourcesize,PERROR)

1

我寫的分解,然後做一些替代回調。它可能可以作爲音譯來實現。代碼在這裏decompcb.c和標題在附近。其上安裝一個Unicode到ASCII轉換如下:

ucnv_setFromUCallBack(gConverter, &UCNV_FROM_U_CALLBACK_DECOMPOSE, &status); 

然後使用gConverter從Unicode字符轉換成ASCII