我正在尝试将Mac OS Roman字符串转换为UTF8字符串:

MacRoman: OneBW/1 Schwarzwei§:

我正在使用这些电话:

nBufLen = MultiByteToWideChar(CP_MACCP, 0, macRomanString.c_str(), -1, NULL, 0);

MultiByteToWideChar(CP_MACCP, 0, macRomanString.c_str(), -1, tempWchar, nBufLen);


在此刻:

tempWhar = OneBW/1 Schwarzweiß:

现在,我正在打电话:

WideCharToMultiByte(CP_UTF8, 0, tempWchar, -1, temp, nBufLen, NULL, NULL);

我期望temp使用UTF 8,但是我得到的返回值是0,这是不成功的转换,是temp中的字符串。我怎么知道temp中的字符串是UTF?

我是用正确的方式做的还是缺少什​​么?谢谢。

最佳答案

WideCharToMultiByte将从输入中获取单个宽字符并将其转换为输出中的多个字符。因此,在大多数情况下,输出将大于输入。您传递的缓冲区大小与从MultiByteToWideChar获得的缓冲区大小相同,因此缓冲区自然太小。

您可以像使用MultiByteToWideChar一样获得所需的缓冲区大小,将缓冲区大小传递0并使用返回的值。

函数失败时,在字符串末尾看到垃圾的原因是,缓冲区没有足够的空间容纳必要的终止空字符。打印字符串从缓冲区末尾开始。

08-15 23:44