使用Mongo C Driver 顯示中文問題
-
const char *uristr = "mongodb://10.134.98.228:15017/";
doc = BCON_NEW("Op", BCON_UTF8("Add"), "Scene", BCON_UTF8("Basic.Scene1"), "SourceID", BCON_UTF8("game_capture"), "SourceName", BCON_UTF8("遊戲擷取"),
"Optime", BCON_UTF8("2017-03-09 15:48:39"));
使用C驅動版本mongo-c-driver-1.6.0
寫入mongodb 後 中文顯示亂碼 "SourceName":" C ^ "
請問是哪裡錯了 ? 謝謝
-
要先確定一下 cmd 可以正常秀 UTF-8。要不然你得用別種的 client 去 query 看看。
-
比較像是命令提示字元的顯示問題,因為能存進去代表有轉成 UTF-8,你使用 Robomongo 連看看
-
-
-
看來答案很明顯,試試從編碼轉換著手
-
將程式碼加上 :
#include<wchar.h>
/*轉換函數*/
void UnicodeTOUTF8(char *utf,wchar_t *s)
{
/*得到所需空間大小*/
int n = WideCharToMultiByte(CP_UTF8, NULL, s, wcslen(s), NULL, 0, NULL, NULL);
/*轉換*/
WideCharToMultiByte(CP_UTF8, NULL, s, wcslen(s), utf, n, NULL, NULL);
utf[n] = '\0';
}
在main()中新增
char name[128] = {0};
wchar_t *s = L"遊戲擷取";
const char *namep;
UnicodeTOUTF8(name, s);/*轉換函數*/
namep = name;
doc = BCON_NEW("Op", BCON_UTF8("Add"), "Scene", BCON_UTF8("Basic.Scene1"), "SourceID", BCON_UTF8("game_capture"), "SourceName", BCON_UTF8(namep), "Optime", BCON_UTF8("2017-03-09 15:48:39"));
新增顯示中文成功 :
-
看起來關鍵是 WideCharToMultiByte,收藏~
-
補充:
在中文版Windows中,命令提示字元預設使用BIG5編碼,因此檢視UTF-8編碼時會出現亂碼。
所以要先執行 chcp 65001,就可以正確顯示UTF-8編碼。