日语字符串从wstring转换为Multibyte

时间:2017-11-29 14:15:38

标签: c++11 encoding type-conversion

我试图使用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因此它转换正确的字节但仍然存在垃圾值。在我的错误日志中,我得到空白消息意味着转换很好。

0 个答案:

没有答案