std::vector<stkvec> stkvecs1 = {
{"301598", "黄山谷捷"}
};
std::string text22 = "这里是一些包含股票名称的文本,比如黄山谷捷。";
std::vector<std::string> matches = findMatchesWithRegex(stkvecs1, text22);
这里在VS调试的时候显示为中文可识别, 可是如果从MYSQL 读取UTF8mb4的列到容器后就是乱码了:
bool FetchDataVecFromMySQL(MYSQL* conn) {
MYSQL_RES* res = nullptr;
MYSQL_ROW row;
if (conn == NULL) {
fprintf(stderr, "Connection is null\n");
return false;
}
// 设置字符集选项
mysql_options(conn, MYSQL_SET_CHARSET_NAME, "utf8mb4");
if (mysql_set_character_set(conn, "utf8mb4")) {
fprintf(stderr, "mysql_set_character_set() failed: %s\n", mysql_error(conn));
return false;
}
// 确保客户端与服务器之间通信使用utf8mb4字符集
if (mysql_query(conn, "SET NAMES utf8mb4;")) {
fprintf(stderr, "Error setting names to utf8mb4: %s\n", mysql_error(conn));
return false;
}
const char* query = "SELECT stkcode,stkname FROM fxj where stkcode like '30158%'; ";
if (mysql_query(conn, query)) {
fprintf(stderr, "SELECT query error: %s\n", mysql_error(conn));
return false;
}
res = mysql_store_result(conn);
//if (res) {
// while ((row = mysql_fetch_row(res)) != NULL) {
// std::string stkcode = row[0] ? row[0] : "";
// std::string stkname = row[1] ? row[1] : "";
// // 打印原始字节以调试
// printf("Raw bytes for stkname: ");
// for (unsigned char c : stkname) {
// printf("%02x ", c);
// }
// printf("\n");
// // 尝试转换并打印
// printf("stkcode: %s, stkname: %s\n", stkcode.c_str(), stkname.c_str());
// }
// mysql_free_result(res);
//}
if (res) {
// 设置全局区域设置为UTF-8
std::setlocale(LC_ALL, "en_US.utf8");
while ((row = mysql_fetch_row(res)) != NULL) {
std::string stkcode = row[0] ? row[0] : "";
std::string stkname = row[1] ? row[1] : "";
// 打印原始字节以调试
printf("Raw bytes for stkname: ");
for (unsigned char c : stkname) {
printf("%02x ", c);
}
printf("\n");
// 使用wprintf进行宽字符输出
wchar_t w_stkname[256];
mbstowcs(w_stkname, stkname.c_str(), stkname.size());
wprintf(L"stkcode: %hs, stkname: %ls\n", stkcode.c_str(), w_stkname);
stkvec vec;
vec.stkcode = row[0] ? row[0] : "";
vec.stkname = row[1] ? row[1] : "";
stkvecs.push_back(vec);
}
mysql_free_result(res);
}
return true;
}