rkfirefox
小狐狸
小狐狸
  • UID34419
  • 注册日期2010-11-04
  • 最后登录2010-11-11
  • 发帖数6
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:4645回复:2

急急急!STRINGZ_TO_NPVARIANT不能返回中文字符串?

楼主#
更多 发布于:2011-02-17 17:33
已知一个方法,调用结束时将返回一个字符串,用的就是
STRINGZ_TO_NPVARIANT(szResult, *result);
szResult是个NPN_MemAlloc开辟的char型数组缓冲区,如果给它填入的内容是英文,返回正确,在网页里alert也看到正确结果,如果含有中文,可能alert个空的框框,要么截止中文就不显示了。

请教大侠,是何原因,我开发的np插件,用作公司内部axtivex的容器,以运行在firefox下,欢迎相互交流!尤其期待对此问题的请教喔!俺的Q:1780529162
sauntercloud
小狐狸
小狐狸
  • UID36635
  • 注册日期2011-06-30
  • 最后登录2011-06-30
  • 发帖数1
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2011-02-17 17:33
转换成UTF8之后再返回。
yanite
小狐狸
小狐狸
  • UID30860
  • 注册日期2009-10-27
  • 最后登录2011-07-06
  • 发帖数5
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2011-02-17 17:33
转换不了哦。 怎么转都转不了, 郁闷了???
求解啊?
可以MessageBox 写文件也正常,但用了段代码后还是乱码。

cout.clear();
    cout.str("中文");
    LPCWSTR lpcwszStr = (WCHAR *)cout.str().c_str();
    DWORD dwNum = WideCharToMultiByte(CP_UTF8, NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
    LPSTR psText = (LPSTR)NPN_MemAlloc(dwNum);
    //ZeroMemory( (void *)p, dwNum );
    WideCharToMultiByte(CP_UTF8, NULL, lpcwszStr, -1, psText, strlen(cout.str().c_str()), NULL, FALSE);

    //fwrite(lpcwszStr, strlen(dwNum), 1, fp);
    fwrite(psText, dwNum, 1, fp);
    fclose(fp);
    //memcpy(result, buffer, strlen(szbuf)));

    NPUTF8 *utf8_chars = static_cast<NPUTF8*>(NPN_MemAlloc(dwNum));   
    memcpy(utf8_chars, psText, dwNum);   
    STRINGZ_TO_NPVARIANT(utf8_chars, *result);
    NPN_MemFree(psText);
游客

返回顶部