C++字符集的相互传换 and sqlite3_open 返回14

转载 2013年12月03日 10:08:58

sqlite3_open 返回14,文件路径包含中文。

解决方法:插入前,把SQL语句转UTF8格式。



C++字符集的相互传换   


#include <windows.h>

#include <vector>

#include <string>

using namespace std;

 

//utf8 转 Unicode

std::wstring Utf82Unicode(const std::string& utf8string)
{
 int widesize = ::MultiByteToWideChar(CP_UTF8, 0, utf8string.c_str(), -1, NULL, 0);
 if (widesize == ERROR_NO_UNICODE_TRANSLATION)
 {
  throw std::exception("Invalid UTF-8 sequence.");
 }
 if (widesize == 0)
 {
  throw std::exception("Error in conversion.");
 }
 
 std::vector<wchar_t> resultstring(widesize);
 
 int convresult = ::MultiByteToWideChar(CP_UTF8, 0, utf8string.c_str(), -1, &resultstring[0], widesize);
 
 if (convresult != widesize)
 {
  throw std::exception("La falla!");
 }
 
 return std::wstring(&resultstring[0]);
}


//unicode 转为 ascii

string WideByte2Acsi(wstring& wstrcode)
{
 int asciisize = ::WideCharToMultiByte(CP_OEMCP, 0, wstrcode.c_str(), -1, NULL, 0, NULL, NULL);
 if (asciisize == ERROR_NO_UNICODE_TRANSLATION)
 {
  throw std::exception("Invalid UTF-8 sequence.");
 }
 if (asciisize == 0)
 {
  throw std::exception("Error in conversion.");
 }
    std::vector<char> resultstring(asciisize);
 int convresult =::WideCharToMultiByte(CP_OEMCP, 0, wstrcode.c_str(), -1, &resultstring[0], asciisize, NULL, NULL);
 
 if (convresult != asciisize)
 {
  throw std::exception("La falla!");
 }
 
    return std::string(&resultstring[0]);
}

 

//utf-8 转 ascii

string UTF_82ASCII(string& strUtf8Code)
{
 string strRet("");


 //先把 utf8 转为 unicode 
 wstring wstr = Utf82Unicode(strUtf8Code);

 //最后把 unicode 转为 ascii
 strRet = WideByte2Acsi(wstr);


 return strRet;
}

///////////////////////////////////////////////////////////////////////

//ascii 转 Unicode

wstring Acsi2WideByte(string& strascii)
{
 int widesize = MultiByteToWideChar (CP_ACP, 0, (char*)strascii.c_str(), -1, NULL, 0);
 if (widesize == ERROR_NO_UNICODE_TRANSLATION)
 {
  throw std::exception("Invalid UTF-8 sequence.");
 }
 if (widesize == 0)
 {
  throw std::exception("Error in conversion.");
 }
    std::vector<wchar_t> resultstring(widesize);
 int convresult = MultiByteToWideChar (CP_ACP, 0, (char*)strascii.c_str(), -1, &resultstring[0], widesize);

 if (convresult != widesize)
 {
  throw std::exception("La falla!");
 }
 
    return std::wstring(&resultstring[0]);
}

//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<char> 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]);
}

//ascii 转 Utf8

string ASCII2UTF_8(string& strAsciiCode)
{
 string strRet("");


 //先把 ascii 转为 unicode 
 wstring wstr = Acsi2WideByte(strAsciiCode);

 //最后把 unicode 转为 utf8

 strRet = Unicode2Utf8(wstr);


 return strRet;
}



Link:

http://blog.163.com/gaoguangtao_love/blog/static/38483715200874111519785/

http://blog.163.com/gaoguangtao_love/blog/static/3848371520114274236119/

无刷直流电机换相时刻电流变化速率的讨论

文献[1]讨论了换相时电流变化的三种情形,如下: 关断相电流下降速率等于开通相电流上升速率; 关断相电流下降速率大于开通相电流上升速率,此时关断相电流在开通相电流增至给定电流之前减至零; 关断相电流下...
  • yy123xiang
  • yy123xiang
  • 2016年12月28日 00:04
  • 799

C++14返回值自动推导

这次C++标准委员会快速的通过了最新的C++标准:C++14,要知道C++11可是一再跳票后的产物。此次快速的发布的缘由可能和C++14的改动较小有关,C++之父Bjarne Stroustrup也说...
  • gettogetto
  • gettogetto
  • 2017年03月10日 14:58
  • 328

QML和c++(Qt)相互传值

QML
  • tony2278
  • tony2278
  • 2016年09月13日 10:22
  • 1454

PHP JQuery 跨页面传值

一:JavaScript JQuery页面值传递之URL 通过URL进行传值.把要传递的信息接在URL上. 在index.html中有个,点击后跳转到另外的一个页面,显示该用户的信息信息 ...
  • u014289186
  • u014289186
  • 2014年07月29日 02:15
  • 1267

前台和后台的相互传值

前后台的相互传值如果值太多,写的麻烦累人,且容易出错。这里整理出一套使用标记 标签属性的办法来传值, 后台取值和前台的绑定都有了大大的简化。 一、把json对象转成字符串 $.extend({...
  • SJB2MLN
  • SJB2MLN
  • 2017年07月14日 11:01
  • 669

Java Web中界面之间传值的实现方法

出处:http://blog.csdn.net/suwu150   在web中,我们经常要在页面之间进行值的传递,但是具体的该怎么做呢??下面就让我们来实现: 传值时有以下几种方式,分别如...
  • qwezhaohaihong
  • qwezhaohaihong
  • 2017年10月18日 23:06
  • 201

多个应用相互传值

有两个app,分别叫做App1和App2。 App1包含两个Activity,分别叫做App1_A和App1_B.其中App1_A是入口Activity. 也就是App1_A设置intent-fi...
  • public_calss
  • public_calss
  • 2014年08月13日 18:23
  • 430

C++算法 - 辗转相除法(求最大公约数)

问题及代码: /* * Copyright (c) 2014, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:.cpp * 作 者:何小乐 * 完成...
  • hexiaole1994
  • hexiaole1994
  • 2014年10月29日 22:19
  • 5874

C++14新特性总结

C++14这一继C++11之后的新的C++标准已经被正式批准,正在向ISO提交,将于年内发布。C++之父Bjarne Stroustrup说道,尽管与C++11相比,C++14的改进“有意做的比较...
  • weiqubo
  • weiqubo
  • 2016年09月06日 22:34
  • 13180

C++11/14新特性快速概览

推荐几篇关于C++11/14新特性的文章,是一个系列的,可以快速了解那些新特性,并配有简单移动的代码示例: 1. 关于初始化列表的,例如使用形如{1, 2, 3, 4, 5}为以前并不支持此种初始化...
  • beyongwang
  • beyongwang
  • 2017年01月11日 21:53
  • 1265
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++字符集的相互传换 and sqlite3_open 返回14
举报原因:
原因补充:

(最多只允许输入30个字)