使用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    ^  "

    請問是哪裡錯了 ? 謝謝


  • Lv 1

    要先確定一下 cmd 可以正常秀 UTF-8。要不然你得用別種的 client 去 query 看看。


  • 註冊用戶

    比較像是命令提示字元的顯示問題,因為能存進去代表有轉成 UTF-8,你使用 Robomongo 連看看


  • 註冊用戶

    @yea

    使用Robomongo  顯示亂碼,可能是因為BCON_UTF8("遊戲擷取") 值是中文 造成錯誤


  • Lv 1

    @Avon

    改用 

    BCON_UTF8(L"遊戲擷取") 

    試試看


  • 註冊用戶

    看來答案很明顯,試試從編碼轉換著手


  • 註冊用戶

    @22265

    將程式碼加上 :

    #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,收藏~


  • 註冊用戶

    @Avon

    補充:
    在中文版Windows中,命令提示字元預設使用BIG5編碼,因此檢視UTF-8編碼時會出現亂碼。
    所以要先執行 chcp 65001,就可以正確顯示UTF-8編碼。


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待