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

时间:2013-02-01 12:09:10

标签: utf-8 c++builder

我尝试在C ++构建器中将UnicodeString转换为UTF-8编码的字符串。我使用UnicodeToUtf8()函数来做到这一点。

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

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

2 个答案:

答案 0 :(得分: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...

答案 1 :(得分: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 );