errorUnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0x87 in position 10: invalid

1 篇文章 0 订阅
1 篇文章 0 订阅
在Python中读取由Visual Studio(VS)以Unicode编码写入的文件时,出现'utf-8'编码错误。解决方法是在VS保存文件时将Unicode转换为UTF-8编码。提供的代码片段展示了从Unicode到UTF-8以及从UTF-8到Unicode的转换函数。确保在处理跨平台或不同编辑器之间的数据交互时正确处理字符编码。
摘要由CSDN通过智能技术生成

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; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值