Esempio n. 1
0
wstring s2ws(const string &s,_locale_t locale)
{
    wstring result;
    if(!locale)
    {
        return result;
    }
    const size_t len = s.size()+1;
    wchar_t *dest = new wchar_t[len];
    size_t numOfCharConverted = 0;

    errno_t err = _mbstowcs_s_l(&numOfCharConverted,dest,len,s.c_str(),_TRUNCATE,locale);

    if(err == 0)
    {
        result = dest;
    }
    else if(err == STRUNCATE)
    {
        OutputDebugStringA("UniCore s2ws 目标缓冲区不足,字符串被截断。");
        result = dest;
    }
    else
    {
        OutputDebugStringA("UniCore s2ws 转换MBCS字符串到Unicode字符串时失败。");
    }
    delete []dest;
    return result;
}
Esempio n. 2
0
wstring s2ws(const string &s,const char *locale /*= ""*/)
{
	assert(locale);

    wstring result;

    _locale_t loc = _create_locale(LC_CTYPE,locale);  //使用指定的locale。
	//如果_create_locale返回空,返回空字符串。
    if(!loc)
    {
        return result;
    }

	const size_t len = s.size()+1;
	wchar_t *dest = new wchar_t[len];
	size_t numOfCharConverted = 0;
    errno_t err = _mbstowcs_s_l(&numOfCharConverted,dest,len,s.c_str(),_TRUNCATE,loc);
    _free_locale(loc);
    if(err == 0)
    {
        result = dest;
    }
    else if(err == STRUNCATE)
    {
		assert(!"dest buffer should be adequate");
        result = dest;
    }
    else
    {
		//转换失败。
    }
    delete []dest;
    return result;
}
Esempio n. 3
0
std::wstring convert(const char* m, _locale_t l)
{
    wchar_t msg[1024];
    size_t s = 0;
    _mbstowcs_s_l(&s, msg, 1024, m, _TRUNCATE, l);
    return msg;
}
Esempio n. 4
0
// callback to get result
static void callback_result_final(Recog *recog, void *data)
{
	cJulius *j = (cJulius *)data;

	int i;
	WORD_INFO *winfo;
	WORD_ID *seq;
	int seqnum;
	Sentence *s;
	RecogProcess *r;
	static char str[2048];
	static wchar_t wstr[2048];
	size_t size = 0;
	WPARAM wparam = 0;
	_locale_t locale;
	unsigned int code;

	r = j->getRecog()->process_list;
	if (! r->live) return;

	if (r->result.status < 0) {      /* no results obtained */

		switch(r->result.status) {
		case J_RESULT_STATUS_REJECT_POWER:
			strcpy(str, "<input rejected by power>");
			break;
		case J_RESULT_STATUS_TERMINATE:
			strcpy(str, "<input teminated by request>");
			break;
		case J_RESULT_STATUS_ONLY_SILENCE:
			strcpy(str, "<input rejected by decoder (silence input result)>");
			break;
		case J_RESULT_STATUS_REJECT_GMM:
			strcpy(str, "<input rejected by GMM>");
			break;
		case J_RESULT_STATUS_REJECT_SHORT:
			strcpy(str, "<input rejected by short input>");
			break;
		case J_RESULT_STATUS_FAIL:
			strcpy(str, "<search failed>");
			break;
		}
		code = (- r->result.status);

	} else {

	    winfo = r->lm->winfo;
		s = &(r->result.sent[0]);
		seq = s->word;
		seqnum = s->word_num;
		str[0] = '\0';
		for(i=0;i<seqnum;i++) strcat(str, winfo->woutput[seq[i]]);
		code = 0;
	}

	// convert to wide char
	//mbstowcs_s( &size, wstr, str, strlen(str)+1);
	locale = j->getModelLocale();
	if (locale) _mbstowcs_s_l( &size, wstr, str, strlen(str)+1, locale);
	else mbstowcs_s( &size, wstr, str, strlen(str)+1);


	// set status parameter
	wparam = (code << 16) + JEVENT_RESULT_FINAL;

	// send message
	PostMessage(j->getWindow(), WM_JULIUS, wparam, (LPARAM)wstr);
}