2013-02-01 54 views
4

我嘗試將UnicodeString轉換爲C++ builder中的UTF-8編碼字符串。我使用UnicodeToUtf8()函數來做到這一點。C++ builder - 將UnicodeString轉換爲UTF-8編碼字符串

char * dest; 
UnicodeSring src; 
UnicodeToUtf8(dest,256,src.w_str(),src.Length()); 

但編譯器向我顯示運行時訪問衝突消息。我做錯了什麼?

回答

3

這解決了問題中的問題,但真正的UTF16轉換爲UTF8轉換的方式在下面的Remy的答案中。

dest是一個指向內存中隨機空間的指針,因爲您不初始化它。在調試版本中,它可能指向0,但在發佈版本中,它可能在任何地方。你告訴UnicodeToUtf8 dest是一個緩衝區,有256個字符的空間。

試試這個

char dest[256]; // room for 256 characters 
UnicodeString src = L"Test this"; 
UnicodeToUtf8(dest, 256, src, src.Length()); 

但在現實中,你可以使用簡單:

char dest[256]; // room for 256 characters 
UnicodeString src = L"Test this"; 
UnicodeToUtf8(dest, src, 256); 
+0

非常感謝你。 – Paramore

8

假設你正在使用C++ Builder的2009年或更高版本(你沒有說),並且使用RTL的System::UnicodeString類(而不是其他第三方UnicodeString類),那麼處理這種情況的方法就簡單多了。 C++ Builder也有一個System::UTF8String類可用(自C++ Builder 6以來它已經可用,但直到C++ Builder 2009才成爲真正的RTL實現的UTF-8字符串類型)。只要你分配給UnicodeString一個UTF8String,讓RTL處理內存分配,併爲您的數據轉換,例如:

UnicodeString src = ...; 
UTF8String dest = src; // <-- automatic UTF16-to-UTF8 conversion 
// use dest.c_str() and dest.Length() as needed... 
+0

雷米,非常感謝你的回答。 +1 – Paramore

相關問題