c++输出字符数组乱码_C++使用sqlite时,中文字符显示乱码问题

字符串转换时需要先将ANSI转换成UTF8,在字符串前面加L,即L“我的字符串”;

再利用Unicode 转 Utf8 函数:

std::string Unicode2Utf8(const std::wstring& widestring)

{

int utf8size = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL);

if (utf8size == 0)

{

throw std::exception("Error in conversion.");

}

std::vector resultstring(utf8size);

int convresult = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, &resultstring[0], utf8size, NULL, NULL);

if (convresult != utf8size)

{

throw std::exception("La falla!");

}

return std::string(&resultstring[0]);

}

主函数使用:

int main()

{

open_db();

//create_table();

//drop_table();

insert_data(00010, "minda", const_cast(Unicode2Utf8(_T("测测测测测")).c_str()));

//insert_data(9,"minda","测测测测测");

//insert_data(2, "yuan", "测测测");

//insert_data(7, "www","chifan");

//search_data(1);

search_data("minda");

delete_data("yuan");

system("pause");

return 0;

}

数据库的使用及上面几个函数(open_db,create_table等函数)的定义,在上一篇博客中有详细给出,参看对应网址中的代码即可,拷贝即可使用 遇到几个问题,具体警告不记得了,以下的方法可以都试试: 解决方法如下:项目属性中---->C++ -------> 预处理器 ------------> 预处理器定义 ----------> 加一个_X86_

a24d3e3c242035a617abdee2f22a4516.png

另外一个问题是:sqlite3.c 编译不过 解决方法:不使用预编译头

d997743cf8e38170c8b5799de92aba93.png

从sqlite中输出中文时,一直显示不对,原因一是格式问题:UTF8先要转换成unicode类型

std::wstring UTF8ToUnicode(const string& strin)

{

wstring strOut;

int dwNum = MultiByteToWideChar(CP_UTF8, 0, strin.c_str(), -1, 0, 0);

wchar_t* pBuffer = new wchar_t[dwNum];

if (!pBuffer) { return strOut; }

memset(pBuffer, 0, dwNum * sizeof(wchar_t));

if (MultiByteToWideChar(CP_UTF8, 0, strin.c_str(), -1, pBuffer, dwNum) >= 0)

{

strOut = pBuffer;

}

delete[] pBuffer;

return strOut;

}

另一个大坑就是最后使用wcout输出,控制台一直没有内容,原因就在wcout这个函数上面,具体原因可以参看此篇博客 https://blog.csdn.net/querw/article/details/6690954 但是这篇博客中给出的方法不能用(是我技术渣不会用),后来找的一个方法,可以正确输出中文,只需在输出时添加两句话,并且需要包含头文件 #include

1984ae5ca55d278719e02bd96093555d.png

这样最终就能正常显示拉~

b1410e7dc9c851ed1cd8a3f8a40eefec.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值