mfc mysql中文乱码_vs2010 将mysql中数据导入到MFC列表中显示乱码

在VS2010中使用MFC从MySQL数据库导入数据到列表控件时,遇到中文显示为乱码。通过在设置列表项文本时使用_T()宏来解决乱码问题。代码示例中展示了如何正确显示数据库中的中文数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下BOOLCsqltextDlg::OnInitDialog(){CDialogEx::OnInitDialog();//将“关于...”菜单项添加到系统菜单中。//IDM_ABOUTBOX必须在系统命令范围内。ASSERT((IDM_ABOUTBOX&0xFFF0)=...

代码如下

BOOL CsqltextDlg::OnInitDialog()

{

CDialogEx::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

BOOL bNameValid;

CString strAboutMenu;

bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

ASSERT(bNameValid);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动

// 执行此操作

SetIcon(m_hIcon, TRUE);// 设置大图标

SetIcon(m_hIcon, FALSE);// 设置小图标

// TODO: 在此添加额外的初始化代码

m_List.SetExtendedStyle(LVS_EX_FLATSB

|LVS_EX_FULLROWSELECT

|LVS_EX_HEADERDRAGDROP

|LVS_EX_ONECLICKACTIVATE

|LVS_EX_GRIDLINES);

m_List.InsertColumn(0,_T("ID"),LVCFMT_LEFT,100,0);

m_List.InsertColumn(1,_T("Name"),LVCFMT_LEFT,100,1);

m_List.InsertColumn(2,_T("CountryCode"),LVCFMT_LEFT,100,2);

m_List.InsertColumn(3,_T("District"),LVCFMT_LEFT,100,3);

m_List.InsertColumn(4,_T("Population"),LVCFMT_LEFT,100,4);

MYSQL m_MySQL;

mysql_init(&m_MySQL);

if(!mysql_real_connect(&m_MySQL,"localhost","root","159753","world",3306,NULL,0))

{

AfxMessageBox(_T("数据库连接失败"));

return FALSE;

}

char *ch_query;

ch_query="SELECT * FROM city";

if(mysql_real_query(&m_MySQL,"SELECT * FROM city",(UINT)strlen(ch_query))!=0)

{

AfxMessageBox(_T("读取数据表格失败!"));

return FALSE;

}

MYSQL_RES *result;

MYSQL_ROW row;

if(!(result=mysql_use_result(&m_MySQL)))

{

AfxMessageBox(_T("读取数据集失败"));

return FALSE;

}

CString str;

int i=0;

while(row = mysql_fetch_row(result))

{

str.Format(_T("%s"),row[0]);

m_List.InsertItem(i,str);

str.Format(_T("%s"),row[1]);

m_List.SetItemText(i,1,str);

str.Format(_T("%s"),row[2]);

m_List.SetItemText(i,2,str);

str.Format(_T("%s"),row[3]);

m_List.SetItemText(i,3,str);

str.Format(_T("%s"),row[4]);

m_List.SetItemText(i,4,str);

i++;

}

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE

}

同样的代码在去掉str.Format(_T("%s"),row[i]);中的 _T()后在VC6.0中可以显示正常的英文 如下图

下图是数据库中表信息

展开

<think>嗯,用户想解决VS2022中MFC控件中文名称显示乱码的问题。首先,我需要回忆一下MFC中文字符处理的相关知识。MFC默认使用的是多字节字符集(MBCS),而现代Windows系统更倾向于使用Unicode,这可能导致字符编码不一致,出现乱码。 参考用户提供的引用,特别是引用[1]提到将CString转为Unicode存入MySQL,说明Unicode转换是一个有效的解决方法。引用[3]也提到使用Unicode可以解决中文字符问题,但用户可能觉得转换麻烦,所以需要提供更简便的方法。 可能的解决方案包括修改项目属性为Unicode字符集,这样控件会直接使用宽字符,避免转换问题。另外,使用_T宏或L前缀来显式声明宽字符字符串也是一个办法,比如在控件标题设置时使用L"中文"。 还有一种情况是资源文件的编码问题。VS2022默认保存为UTF-8,但可能需要带BOM的格式才能正确识别。将.rc文件转换为UTF-8 BOM编码可能有效。 另外,检查系统区域设置是否支持中文,虽然不是直接相关,但有时系统设置不当也会导致显示问题。 需要确保用户按照步骤操作,比如在项目属性中更改字符集,或者在代码中使用宽字符函数。同时,提醒用户注意资源文件的编码格式,避免因编辑器问题导致乱码。 可能的相关问题包括其他MFC控件乱码、Unicode与多字节的区别,以及资源文件编码设置。这些可以作为相关问题提供给用户,帮助他们进一步了解。</think>### VS2022 MFC控件中文名称乱码解决方案 在Visual Studio 2022的MFC开发中,中文显示乱码通常由字符编码不一致引起。以下是分步解决方案: 1. **设置项目字符集** - 右键项目 → 属性 → 配置属性 → 高级 - 将"字符集"改为**使用Unicode字符集** - 此操作使控件自动支持宽字符输出,避免多字节转换问题[^1] 2. **显式声明宽字符字符串** ```cpp // 设置控件文本时使用L前缀 GetDlgItem(IDC_STATIC)->SetWindowTextW(L"中文标签"); // 或在字符串前加_T宏 CString str = _T("需要显示的汉字"); ``` 3. **修改资源文件编码** - 用VS2022打开`.rc`资源文件 - 文件 → 另存为 → 选择"UTF-8 带签名"编码格式 - 重新编译后中文资源可正确识别[^3] 4. **检查系统区域设置** - 控制面板 → 区域 → 管理 → 非Unicode程序的语言设置 - 确保选择**中文(简体,中国)** ![编码设置示意图](https://example.com/encoding-settings.png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值