gpt4 book ai didi

c++ - 如何将 Unicode 字符串连接成字符串以传递给 mysql 调用

转载 作者:行者123 更新时间:2023-11-27 22:35:05 25 4
gpt4 key购买 nike

我正在尝试将一个字符串数组连接成一个字符数组 - 但其中一个字符串是外语(为什么我需要 UTF8)。从数据库中读取 UTF8 字符串并将其放入 wxString 数组后,我可以在调试器 (Visual Studio) 中以适当的语言看到 UTF8 字符串,但是当我尝试将字符串连接到数组时,t 永远不会放在那里.

我试过 variable.mb_str() 变量.mb.str().data()。两者似乎都不适用于 strcat对于我的语言数据。其他数据连接良好。所有数据均来自 MariaDB 数据库调用。

 int i, numRows;
wxString query;
wxString sortby;
wxString group_list;
wxString *stringGroups;
char holdString[400];

/* Try UTF Force */
query.Printf(_("set names 'utf8'"));
mysql_query(mDb, query.mb_str());
result = mysql_store_result(mDb);
mysql_free_result(result);
query.Printf(_("select GROUP_NAME from USER_PERMS where USER_NAME =
\"%s\"
ORDER BY GROUP_NAME "), riv_getuser().c_str() );
mysql_query(mDb, query.mb_str());
result = mysql_store_result(mDb);
numRows = mysql_num_rows(result);
stringGroups = new wxString[numRows + 1];
i = 0;
while ((row = mysql_fetch_row(result)))
{
stringGroups[i] = wxString(row[0], wxConvUTF8);
i++;
}
mysql_free_result(result);
i = 0;
strcpy (holdString,"IN (\'");
while (i < numRows)
{
if (i != 0) strcat(holdString, "\', \'");
strcat(holdString, (const char *)stringGroups[i].mb_str().data());
i++;
}
strcat (holdString," \')");

-- END OF CODE --

--ACTUAL stringGroup that fails -- Debugger Watch Output
stringGroups[2] {m_impl=L"文字化け"...

我希望得到:

IN ( 'test' , 'test' , '文字化け' )

我得到了什么

IN ( 'test','test2','' )

最佳答案

不要将strcpy()strcat()wxString 一起使用,这只会造成不必要的错误。如果您首先使用 wxString,构建您需要的整个字符串,然后使用 utf8_str() 方法获取包含 UTF-8 字符串内容的缓冲区,然后您可以将其传递到您需要的任何功能。

请记住,此缓冲区是临时的,因此如果您不复制它或至少延长其生命周期,则不能指望它继续存在,即

auto const& buf = some_wx_string.utf8_str();
... now you can use buf.data() safely until the end of scope ...

关于c++ - 如何将 Unicode 字符串连接成字符串以传递给 mysql 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55579601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com