【问题标题】:C++ builder - convert UnicodeString to UTF-8 encoded stringC++ builder - 将 UnicodeString 转换为 UTF-8 编码字符串
【发布时间】:2013-02-01 12:09:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: utf-8 c++builder


    【解决方案1】:

    假设您使用的是 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...
    

    【讨论】:

      【解决方案2】:

      这解决了问题中的问题,但是将 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 );
      

      【讨论】:

        猜你喜欢
        • 2011-12-08
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-01
        • 2011-08-16
        • 2016-10-01
        相关资源
        最近更新 更多