首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

Chrome开发JS调用NPRuntim崩溃,STRINGZ_TO_NPVARIANT不能回到中文字符串

2013-10-12 
Chrome开发JS调用NPRuntim崩溃,STRINGZ_TO_NPVARIANT不能返回中文字符串在做JS和NPRuntime交互的时候,在js

Chrome开发JS调用NPRuntim崩溃,STRINGZ_TO_NPVARIANT不能返回中文字符串

在做JS和NPRuntime交互的时候,在js的函数返回字符串,总是崩溃。

跟踪发现,是STRINGZ_TO_NPVARIANT(m_szTextGui, *result);的问题。

插件在处理输出的时候,如果是字符串,必须NPN_MemAlloc来分配一个内存。

所以写如下的代码:

sprintf( m_szTextGui, "%s", "abcefghij" );int len = strlen(m_szTextGui)+1;NPUTF8  *utf8_chars = static_cast<NPUTF8 *>(NPN_MemAlloc(len)); memset( utf8_chars, 0, len );strncpy( utf8_chars, m_szTextGui, len);STRINGZ_TO_NPVARIANT(utf8_chars, *result);   


能够正常显示。JS的alert(),也正确。

但是当我的字符串变成中文的时候。发现中文不显示。后来发现是字符串转换的问题。

要把GB2312转成utf8才可以。

没有一种方法可以直接将GB2312转换成UTF8,所以这里就要先转UNICODE,再sprintf( m_szTextGui, "%s", "abcefghij中文" );int nLen = MultiByteToWideChar(CP_ACP, 0, m_szTextGui, -1, NULL, 0);if (nLen == 0)return false;WCHAR *pwszBuffer = new WCHAR[nLen]; nLen = MultiByteToWideChar(CP_ACP, 0, m_szTextGui, -1, pwszBuffer, nLen);if (nLen == 0)return false; nLen = WideCharToMultiByte(CP_UTF8, 0, pwszBuffer, -1, NULL, 0, NULL, NULL);if (nLen == 0)return false;char *pszBuffer = new char[nLen]; nLen = WideCharToMultiByte(CP_UTF8, 0, pwszBuffer, -1, pszBuffer, nLen, NULL, NULL); if (nLen == 0)return false;nLen = strlen(pszBuffer)+1;NPUTF8 *utf8_chars = static_cast<NPUTF8 *>(NPN_MemAlloc(nLen)); memset( utf8_chars, 0, nLen );strncpy( utf8_chars, pszBuffer, nLen);STRINGZ_TO_NPVARIANT(utf8_chars, *result); if (pszBuffer)delete []pszBuffer; if (pwszBuffer)delete []pwszBuffer;


这样就在JS的alert()中就可以显示中文了。

Chrome开发JS调用NPRuntim崩溃,STRINGZ_TO_NPVARIANT不能回到中文字符串

 

 

 

 

 

 

热点排行