C++ Builder - 将UnicodeString转换为UTF-8编码字符串

6

我尝试在C++ builder中将UnicodeString转换为UTF-8编码的字符串。我使用UnicodeToUtf8()函数来实现。

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

但编译器显示了运行时访问冲突的消息。我做错了什么吗?
2个回答

11
假设您正在使用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...

4

这个修复了问题,但是真正将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 );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接