You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Builder控制台应用中如何正确打印String类型内容?

C++ Builder控制台打印String类型乱码的解决方法

C++ Builder中的String默认是UnicodeString(UTF-16编码的宽字符类型),而std::cout仅支持输出ANSI窄字符(char*),直接用t_str()或c_str()返回的wchar_t*宽字符指针给std::cout输出时,会被错误解析为窄字符,导致乱码。

以下是几种可行的解决方式:

方法1:使用std::wcout输出宽字符

std::wcout专门用于处理宽字符输出,直接搭配String的c_str()或t_str()即可:

bool Tests::test001() {
    std::string temp;

    CDecoder decoder;
    String input = "60000000190210703800000EC00000164593560001791662000000000000080000000002104302040235313531353135313531353153414C4535313030313233343536373831323334353637383930313233";
    String expected_output = "6000000019";
    String output = decoder.getTPDU(input);
    
    std::wcout << L"Expected :" << expected_output.c_str() << std::endl;
    std::wcout << L"Obtained :" << output.c_str() << std::endl;
    
    return output == expected_output;
}

方法2:转换为ANSI字符串输出

如果你的字符串内容仅包含ASCII字符,可以将String转换为AnsiString后再输出:

bool Tests::test001() {
    std::string temp;

    CDecoder decoder;
    String input = "60000000190210703800000EC00000164593560001791662000000000000080000000002104302040235313531353135313531353153414C4535313030313233343536373831323334353637383930313233";
    String expected_output = "6000000019";
    String output = decoder.getTPDU(input);
    
    std::cout << "Expected :" << AnsiString(expected_output).c_str() << std::endl;
    std::cout << "Obtained :" << AnsiString(output).c_str() << std::endl;
    
    return output == expected_output;
}

方法3:配置控制台为UTF-8编码输出

如果需要支持非ASCII字符,可先设置控制台输出编码为UTF-8,再将String转换为UTF-8格式输出:

#include <windows.h>

bool Tests::test001() {
    // 设置控制台输出编码为UTF-8
    SetConsoleOutputCP(CP_UTF8);
    
    std::string temp;

    CDecoder decoder;
    String input = "60000000190210703800000EC00000164593560001791662000000000000080000000002104302040235313531353135313531353153414C4535313030313233343536373831323334353637383930313233";
    String expected_output = "6000000019";
    String output = decoder.getTPDU(input);
    
    std::string expected_utf8 = UTF8String(expected_output);
    std::string output_utf8 = UTF8String(output);
    
    std::cout << "Expected :" << expected_utf8.c_str() << std::endl;
    std::cout << "Obtained :" << output_utf8.c_str() << std::endl;
    
    return output == expected_output;
}

内容的提问来源于stack exchange,提问作者Beto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:35:29