问题描述
在我的二维码中输入一些日文字母。在我的最终结果中,我无法得到我给出的全部内容12345,エンドコード,6789,但部分输出(12345,)将有get.remain部分不会me.can任何人帮助我在我的决赛中获得全部输入结果。
我尝试过:
使用UTF- 8 multibytetowidechar转换方法。
std :: string& output;
std :: string stval((LPCSTR)Out);
std :: wstring convertedstring;
int Reqsize = MultiByteToWideChar(CP_UTF8,0,stval.c_str(),-1,0,0);
if(Reqsize> 0)
{
std :: vector< wchar_t> bufferString(Reqsize);
MultiByteToWideChar(CP_UTF8, 0,stval.c_str(), - 1,& bufferString [0],Reqsize);
convertedstring.assign(bufferString.begin(),bufferString.end() - 1);
}
const wchar_t * szText = convertedstring.c_str();
char * str = new char [1024 ];
冲刺f(str,%ls,szText);
size_t srtzsie = convertedstring.size();
这里str将获得12345 ,只有,最后我使用output.append(str,srtzsie); ,以显示输出。我希望在输出部分显示完整的输入。
提前感谢。
input some Japanese letters in my QR code. in my final result i cant get the whole what i given "12345、エンドコード、6789", but partial output(12345、) will have get.remain part will not me.can anyone help me to get the full input in my final result.
What I have tried:
using the UTF-8 multibytetowidechar conversion method.
std::string &output;
std::string stval((LPCSTR)Out);
std::wstring convertedstring;
int Reqsize = MultiByteToWideChar(CP_UTF8, 0, stval.c_str(), -1, 0, 0);
if (Reqsize > 0)
{
std::vector<wchar_t>bufferString(Reqsize);
MultiByteToWideChar(CP_UTF8, 0, stval.c_str(), -1, &bufferString[0], Reqsize);
convertedstring.assign(bufferString.begin(), bufferString.end() - 1);
}
const wchar_t* szText= convertedstring.c_str();
char *str = new char[1024];
sprintf(str,"%ls", szText);
size_t srtzsie = convertedstring.size();
here str will get 12345、only, finaly i use output.append(str,srtzsie); ,to show the output. i want show full input in my output part.
thanks in advance.
推荐答案
const wchar_t* szText= convertedstring.c_str();
char *str = new char[1024];
sprintf(str,"%ls", szText);
在这里,您使用当前代码页将宽字符串转换为多字节,使用 sprintf
,格式为%ls
。打印字符串时,当前代码页不支持的所有字符都不会在以后显示。
忘记现在使用多字节字符串进行用户交互。在调用Windows API函数时,它们甚至被转换回宽字符串,因为Windows近二十年来在内部使用Unicode。
您的代码也太复杂了。如果Out是UTF-8编码的 LPCSTR
或 LPSTR
:
Here you are converting the wide char string to multi byte using the current code page by using sprintf
with the format %ls
. All characters not supported by the current code page will not be shown later when printing the string.
Forget about using multi byte strings for user interaction nowadays. They are even converted back to wide strings when calling Windows API functions because Windows is using Unicode internally since nearly twenty years.
Your code is also much too complicated. If Out is a UTF-8 encoded LPCSTR
or LPSTR
:
//std::wstring convertedstring;
int reqsize = ::MultiByteToWideChar(CP_UTF8, 0, Out, -1, NULL, 0);
if (reqsize > 0)
{
wchar_t *wide = new wchar_t[reqsize];
::MultiByteToWideChar(CP_UTF8, 0, Out, -1, wide, reqsize);
// Use wide here for output
// Optionally assign it to convertedstring
//convertedstring = wide;
delete[] wide;
}
这篇关于如何在日语字母(多字节字符集)的最终结果部分中获取编码文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!