我嘗試將UnicodeString轉換爲C++ builder中的UTF-8編碼字符串。我使用UnicodeToUtf8()函數來做到這一點。C++ builder - 將UnicodeString轉換爲UTF-8編碼字符串
char * dest;
UnicodeSring src;
UnicodeToUtf8(dest,256,src.w_str(),src.Length());
但編譯器向我顯示運行時訪問衝突消息。我做錯了什麼?
我嘗試將UnicodeString轉換爲C++ builder中的UTF-8編碼字符串。我使用UnicodeToUtf8()函數來做到這一點。C++ builder - 將UnicodeString轉換爲UTF-8編碼字符串
char * dest;
UnicodeSring src;
UnicodeToUtf8(dest,256,src.w_str(),src.Length());
但編譯器向我顯示運行時訪問衝突消息。我做錯了什麼?
這解決了問題中的問題,但真正的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);
假設你正在使用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...
雷米,非常感謝你的回答。 +1 – Paramore
非常感謝你。 – Paramore