我尝试在C++构建器中将UnicodeString转换为UTF-8编码的字符串.我使用UnicodeToUtf8()函数来做到这一点.
char * dest;
UnicodeSring src;
UnicodeToUtf8(dest,256,src.w_str(),src.Length());
Run Code Online (Sandbox Code Playgroud)
但编译器显示我的运行时访问冲突消息.我做错了什么?
Rem*_*eau 10
假设您正在使用C++ Builder 2009或更高版本(您没有说),并且正在使用RTL的System::UnicodeString类(而不是其他第三方UnicodeString类),那么有一种更简单的方法来处理这种情况.C++ Builder也有一个System::UTF8String类可用(它自C++ Builder 6开始提供,但在C++ Builder 2009之前没有成为真正的RTL实现的UTF-8字符串类型).只需将您分配UnicodeString给a UTF8String,让RTL为您处理内存分配和数据转换,例如:
UnicodeString src = ...;
UTF8String dest = src; // <-- automatic UTF16-to-UTF8 conversion
// use dest.c_str() and dest.Length() as needed...
Run Code Online (Sandbox Code Playgroud)
这解决了问题中的问题,但进行 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() );
Run Code Online (Sandbox Code Playgroud)
但实际上你可以使用更简单的方法:
char dest[256]; // room for 256 characters
UnicodeString src = L"Test this";
UnicodeToUtf8( dest, src, 256 );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8245 次 |
| 最近记录: |