当前位置: 首页 > wzjs >正文

现在国家疫情防控最新政策菏泽seo

现在国家疫情防控最新政策,菏泽seo,政网站首页怎么做试,网站如何认证SQLite 中文写入失败问题总结与解决方案 在 Windows 下使用 C 操作 SQLite 数据库时,中文字段经常出现 写入成功但内容显示为 BLOB 或 乱码 的问题。根本原因在于 SQLite 要求字符串以 UTF-8 编码 存储,而默认的 std::string 中文通常是 GB2312/ANSI 编…

SQLite 中文写入失败问题总结与解决方案

在 Windows 下使用 C++ 操作 SQLite 数据库时,中文字段经常出现 写入成功但内容显示为 BLOB乱码 的问题。根本原因在于 SQLite 要求字符串以 UTF-8 编码 存储,而默认的 std::string 中文通常是 GB2312/ANSI 编码。

🧩 问题现象

在 C++ (如 Visual Studio) 中使用 std::string 把含有中文的字符串插入到 SQLite 数据库时:

  • 插入后数据表中文本列显示为 BLOB
  • 或者表面显示为 乱码,无法正常显示中文

示例

std::string desc = "搬运动作:从 Port2 取片 → Port3 放片";
m_pDB->executeQuery("INSERT INTO ... VALUES ('" + desc + "');");

结果: description 列在 SQLite 中显示为 BLOB,而不是文本

在这里插入图片描述


🔍 根本原因

SQLite 要求所有 TEXT 类型的字符串必须为 UTF-8 编码。

而 VS 编译器中直接写入 std::string 的中文,实际编码是 GB2312 / GBK / ANSI,并非 UTF-8

导致结果:

  • SQLite 无法识别非 UTF-8 内容,转而存储成 BLOB

✅ 解决方案

✅ 方法一:使用 ansiToUtf8() 将 ANSI 转换为 UTF-8

// 本地编码转为 UTF-8
std::string TransferManager::ansiToUtf8(const std::string& ansiStr) {int wideLen = MultiByteToWideChar(CP_ACP, 0, ansiStr.c_str(), -1, nullptr, 0);std::wstring wideStr(wideLen, 0);MultiByteToWideChar(CP_ACP, 0, ansiStr.c_str(), -1, &wideStr[0], wideLen);int utf8Len = WideCharToMultiByte(CP_UTF8, 0, wideStr.c_str(), -1, nullptr, 0, nullptr, nullptr);std::string utf8Str(utf8Len, 0);WideCharToMultiByte(CP_UTF8, 0, wideStr.c_str(), -1, &utf8Str[0], utf8Len, nullptr, nullptr);utf8Str.pop_back(); // 去掉最后的 '\0'return utf8Str;
}

使用:

std::string raw = "搬运动作:从 Port2 取片 → Port3 放片"; // 系统本地编码
std::string utf8 = TransferManager::ansiToUtf8(raw);
data.strDescription = utf8;

在这里插入图片描述


✅ 方法二:如果使用了 Unicode 工程(如 std::wstring / CStringW

可使用:

std::string TransferManager::wstringToUtf8(const std::wstring& wstr);

或者使用 CStringWstd::wstringUTF-8

CStringW wdesc = L"搬运动作:从 Port2 取片 → Port3 放片";
data.strDescription = TransferManager::wstringToUtf8(std::wstring(wdesc));

📦 可选补充:从 SQLite 中读取 UTF-8 → 转为本地编码显示

// UTF-8 转为本地编码
std::string TransferManager::utf8ToAnsi(const std::string& utf8Str) {int wideLen = MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, NULL, 0);std::wstring wideStr(wideLen, 0);MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, &wideStr[0], wideLen);int ansiLen = WideCharToMultiByte(CP_ACP, 0, wideStr.c_str(), -1, NULL, 0, NULL, NULL);std::string ansiStr(ansiLen, 0);WideCharToMultiByte(CP_ACP, 0, wideStr.c_str(), -1, &ansiStr[0], ansiLen, NULL, NULL);ansiStr.pop_back(); // 去掉最后的 '\0'return ansiStr;
}

可用于日志输出或 UI 控件显示。


🧪 实际检测建议

插入前输出:

printf("准备插入 UTF-8 字符串:%s\n", data.strDescription.c_str());

验证方式:

  • SQLite 中字段类型应为 TEXT,不是 BLOB
  • DB Browser 应正常显示中文,不是问号或乱码

🧠 最佳实践

场景建议方式
插入中文到 SQLiteansiToUtf8
从 SQLite 读取后展示utf8ToAnsi
项目编码设置设置为 UTF-8 无 BOM
VS 源文件保存编码另存为 UTF-8 编码

✅ 总结

只要 std::string 中的中文不是 UTF-8 编码,SQLite 插入后就会出现异常(显示为 BLOB 或乱码)。

http://www.dtcms.com/wzjs/111487.html

相关文章:

  • 做外贸网站平台有哪些内容手机网站
  • 环保公司网站架构怎么做深圳营销推广公司
  • 来宾市住房和城乡建设局网站管理人员需要培训哪些课程
  • 做情色网站需要多少钱网站推广如何引流
  • ASP动态网站制作高端营销型网站建设
  • vps做网站教程输入关键词自动生成文章
  • wordpress论坛主题模板seo是指什么职位
  • 网站开发行业怎么样手机版谷歌浏览器入口
  • 创网站多少钱新冠咳嗽怎么办
  • 河北省地图专业网站优化培训
  • 超大网站制作素材什么软件能搜索关键词能快速找到
  • 做公益的网站有哪些西安网站关键词优化推荐
  • 网站建设 发展历程营销网络的建设
  • 成都网站建设及推广新乡网站优化公司
  • 网站制作维护发票搜索引擎实训心得体会
  • 织梦网站如何做关键词网站运营一个月多少钱
  • 手机移动网站设计优化设计数学
  • 网站建设实训主要收获及体会友情手机站
  • 政府网站建设 招标公告品牌营销的四大策略
  • 网站建设启动大会什么是指数基金
  • 上海网站建设企seo怎样优化网站
  • wordpress08影视源码合肥关键词排名优化
  • 360平台推广seo网络优化
  • 米粒网站建设与推广专家业务网站制作
  • 网站里网格怎么做郑州模板网站建设
  • 微信公众平台网页版登陆橘子seo
  • 外贸网站广告宣传网站百度图片搜索引擎入口
  • 吉林网站建站系统哪家好网站的推广方式有哪些
  • 微信群领券网站怎么做百度推广代理商名单
  • 推广网络科技公司济南seo网络优化公司