我尝试在C++ builder中将UnicodeString转换为UTF-8编码的字符串。我使用UnicodeToUtf8()函数来实现。
char * dest;
UnicodeSring src;
UnicodeToUtf8(dest,256,src.w_str(),src.Length());
但编译器显示了运行时访问冲突的消息。我做错了什么吗?
我尝试在C++ builder中将UnicodeString转换为UTF-8编码的字符串。我使用UnicodeToUtf8()函数来实现。
char * dest;
UnicodeSring src;
UnicodeToUtf8(dest,256,src.w_str(),src.Length());
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...
这个修复了问题,但是真正将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 );