我正在尝试将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并使用返回的值。
函数失败时,在字符串末尾看到垃圾的原因是,缓冲区没有足够的空间容纳必要的终止空字符。打印字符串从缓冲区末尾开始。