我试图使用wcstombs_s将我的日语wstring转换为多字节字符,但我得到空字符串。这是我第一次使用wc的方法 stombs_s -
wstring str = "ス";
char * outputString;
size_t outputSize = str.length() + 1; // +1 for null terminator
outputString = new char[outputSize];
size_t charsConverted = 0;
const wchar_t * inputW = str.c_str();
wcstombs_s(&charsConverted, outputString, outputSize, inputW, str.length());
我在inputW中收到空字符串,
我也试过在这里使用内置的api WideCharToMultiByte也没有得到预期的输出。这就是我在做什么,任何人都可以告诉我在哪里做错了 -
std::wstring str = L"こんにちは世界";
char *nstringw = new char[256];
size_t status = WideCharToMultiByte( 932U, 0, str.c_str(), static_cast<int>(str.length() + 1), nstringw, 256, nullptr, nullptr);
我在nstringw中收到相同数量的字符但是垃圾值。我只是阅读文本字段值并想要转换它。
更新 -
size_t sizeRequired = WideCharToMultiByte(932U, 0, str.c_str(), -1, NULL, 0, NULL, NULL);
char *nstringw = new char[sizeRequired];
size_t status = WideCharToMultiByte(932U, 0, str.c_str(), static_cast<int>(str.length() + 1), nstringw, sizeRequired, NULL, NULL);
std::string aaa = GetLastErrorAsString();
std::string GetLastErrorAsString()
{
//Get the error message, if any.
DWORD errorMessageID = ::GetLastError();
if (errorMessageID == 0)
return std::string(); //No error message has been recorded
LPSTR messageBuffer = nullptr;
size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
std::string message(messageBuffer, size);
//Free the buffer.
LocalFree(messageBuffer);
return message;
}
我输入15的字符串大小,这意味着输出我需要相同的大小,我输出字符串中的垃圾字符为“,±,ñ,É,¿,ÍŠE”,我的返回值为15应该是15因此它转换正确的字节但仍然存在垃圾值。在我的错误日志中,我得到空白消息意味着转换很好。