python 解析数据,error
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x87 in position 10: invalid continuation byte
在和vs的程序交互时,python去读取vs写的文件,报错。
vs用的unicode字符集
解决方法,在vs写数据的时候,把unicode转换成utf-8就ok了
int Unicode2Utf8(wchar_t *unicode, char* utf8, int nBuffSize)
{
if (!unicode || !wcslen(unicode))
{
return 0;
}
int len;
len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, NULL, 0, NULL, NULL);
if (len > nBuffSize)
{
return 0;
}
WideCharToMultiByte(CP_UTF8, 0, unicode, -1, utf8, len, NULL,NULL);
return len;
}
int WideCharToMultiByte(
UINT CodePage, //指定执行转换的代码页,一般ANSI和UTF-8
DWORD dwFlags, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符
LPCWSTR lpWideCharStr, //指定要转换为宽字节字符串的缓冲区
int cchWideChar, //指定由参数lpWideCharStr指向的缓冲区的字符个数,设置为-1,可返回所需的短字符数组空间的个数
LPSTR lpMultiByteStr, //指向接收被转换字符串的缓冲区
int cchMultiByte, //指定由参数lpMultiByteStr指向的缓冲区最大值
LPCSTR lpDefaultChar, //遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符
LPBOOL pfUsedDefaultChar //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE
);
utf8转unicode
int Utf82Unicode(const char* utf, wchar_t *unicode, int nBuffSize)
{
if(!utf || !strlen(utf))
{
return 0;
}
int len = MultiByteToWideChar(CP_UTF8,0,utf,-1,NULL,0);
size_t num = len*sizeof(wchar_t);
if (num > nBuffSize)
{
return 0;
}
MultiByteToWideChar(CP_UTF8, 0, utf, -1, unicode, len);
return len;
}