SQLite3 用に ANSI から UTF8 への交換関数を提供する。
Sqlite3使用時は必須
使用方法
char* src = "... ";//変換されるansiまたはutf8文字列
char* dst = NULL;/Save the memory pointer allocate internally by the function, no need to pass it into memory buffer
UTF-8に変換:to_utf8(src, &dst);
ANSIに変換:to_gb(src, &dst);
戻り値:ゼロ - 失敗、非ゼロ - 成功。
注意: 操作に成功した場合、この関数内で割り当てられた領域を手動で解放する必要があります。
if(dst)
{
free(dst);
dst = NULL;
}
コード
#include <windows.h>
#include <stdio.h> int to_utf8(char* psrc, char** ppdst)
{
int ret,ret2;
wchar_t* pws = NULL;
char* putf = NULL;
ret = MultiByteToWideChar(CP_ACP, 0, psrc, -1, NULL, 0);
if(ret<=0){
*ppdst = NULL;
return 0;
}
pws = (wchar_t*)malloc(ret*2);
if(!pws){
*ppdst = NULL;
return 0;
}
MultiByteToWideChar(CP_ACP, 0, psrc, -1, pws, ret);
ret2 = WideCharToMultiByte(CP_UTF8, 0, pws, -1, NULL, 0, NULL, NULL);
if(ret2<=0){
free(pws);
return 0;
}
putf = (char*)malloc(ret2);
if(!putf){
free(pws);
return 0;
}
if(WideCharToMultiByte(CP_UTF8, 0, pws, ret, putf, ret2, NULL, NULL)){
*ppdst = putf;
free(pws);
return 1;
}else{
free(pws);
free(putf);
*ppdst = NULL;
return 0;
}
}
int to_gb(char* psrc, char** ppdst)
{
int ret, ret2;
wchar_t* pws = NULL;
char* pgb = NULL;
ret = MultiByteToWideChar(CP_UTF8, 0, psrc, -1, NULL, 0);
if(ret<=0){
*ppdst = NULL;
return 0;
}
pws = (wchar_t*)malloc(ret*2);
if(!pws){
*ppdst = NULL;
return 0;
}
MultiByteToWideChar(CP_UTF8, 0, psrc, -1, pws, ret);
ret2 = WideCharToMultiByte(CP_ACP, 0, pws, -1, NULL, 0, NULL, NULL);
if(ret2<=0){
free(pws);
return 0;
}
pgb = (char*)malloc(ret2);
if(!pgb){
free(pws);
*ppdst = NULL;
return 0;
}
if(WideCharToMultiByte(CP_ACP, 0, pws, -1, pgb, ret2, NULL, NULL)){
*ppdst = pgb;
free(pws);
return 1;
}else{*ppdst = 0;
free(pgb);
free(pws);
return 0;
}
}
by: ガールズ・ドント・クライ
関連
-
Python の sqlalchemy テーブル作成例 詳細
-
ESCAPE を使用して SQL でエスケープを定義する
-
SQLite3の自己追加型主キーに関連する知識のまとめ
-
SQLiteのエラーコードのソート
-
SQLite3 コマンドライン操作ガイド
-
SQLiteインメモリデータベース学習マニュアル
-
SQLiteデータベースの共通文とMACでのSQLite用可視化ツール「MeasSQLlite」の利用について
-
SQLiteチュートリアル(X)。インメモリデータベースとテンポラリデータベース
-
SQLiteチュートリアル(6)。式の説明
-
SQLiteチュートリアル(II)。C/C++インターフェイスの紹介
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン