2010-01-28 103 views
1

我維護一個用Borland C++ 6編寫的應用程序。這個應用程序使用SQLite數據庫。如何將字符串從cp1250轉換爲Borland C++ Builder中的utf-8 6

我現在正在擴展它,所以它可以被非特權用戶使用,所以我不得不將數據庫文件移動到家庭用戶目錄。不幸的是,一些用戶的名字中有波蘭國家人物,如±,ć,and等等。系統代碼頁是cp1250,但SQLite要求我傳遞utf-8編碼路徑。

所以,basicly我需要轉換一個CP1250編碼路徑

String path = "c:\documents and settings\User Name like Zażółć gęślą Jaźń\Application Data\...\MyDb.sqlite" 

爲UTF-8,然後通過將其與path.c_str對於SQLite();

C++構建器是否有任何類來轉換字符集,或者我應該只將短波蘭國家字符代碼映射到它們的utf-8表示形式?

+0

現在你可以寫出映射並完成它:) – Blindy 2010-01-28 10:21:19

+0

我還有其他一些事情要做,我在下午計劃了這個任務。我知道我可以快速繪製它,但我想學習新的東西。 – SWilk 2010-01-28 10:42:00

回答

2

我找不到C++ Builder的文檔(Borland頁面上的鏈接似乎被破壞),但是從我記得的內容來看,您可以直接從AnsiString轉換爲WideString。

一旦你有一個UTF-16字符串,你可以使用WideCharToMultiByte Windows功能,傳遞CP_UTF8作爲參數。

+0

謝謝,它爲我工作。 – SWilk 2010-01-28 12:59:04

+2

將AnsiString分配給WideString將使用OS默認的Ansi代碼頁進行轉換。如果你想使用特定的代碼頁,特別是如果它不同於OS語言,那麼你必須直接調用MultiByteToWideChar()。 – 2010-02-04 02:54:42