2010-07-01 82 views
2

我目前正在使用C++編寫的項目,並將True OLE DBGrids與MS Access後端一起使用。這一切都運行良好,直到現在我們需要能夠將我們的GUI轉換爲顯示阿拉伯字符。 DBGrids不使用Unicode,所以我需要一種方法來顯示數據庫中的字符而不使用Unicode。目前我已經將區域語言設置設置爲阿拉伯語,當我這樣做時,我可以強制網格顯示阿拉伯字符,但我無法通過代碼實現。我需要在運行時能夠在英語和阿拉伯語之間進行切換。我可以拉動數據從數據庫中,然後使用下面的代碼將其轉換成非Unicode:如何在非Unicode的C++環境中獲取和傳遞阿拉伯字符

有了這個話,我可以張貼阿拉伯語到AfxMessageBox的,它顯示正確,但我似乎無法讓網格接受非Unicode字符並正確顯示它們。

任何想法?

回答

1
CString Caption(static_cast<const char*>(tmp)); //convert it 

那不會轉換它。如果tmp包含英文文本,它將生成單個字符。並且如果它包含阿拉伯文本,從Jibber土地的一個平常的說法。由OLE自動化使用的UTF-16和用於8位字符的DBGrid的轉換無法通過強制轉換完成,因此需要轉換功能。像WideCharToMultiByte或OLE2A一樣。

當線程的代碼頁與字符串中使用的字符集相匹配時,此類轉換隻會複製清晰的文本。其中,如果網格顯示阿拉伯文,並且您的線程或您轉換爲英文的代碼頁是英文,則只會產生一堆問號。

如果您不想Unicode啓用您的代碼,那麼您不能在動態的字符集之間切換。您運行此代碼的操作系統在過去的17年中一直支持它。