栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当字符串中包含非ASCII字符时,如何将C字符串(char数组)转换为Python字符串?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当字符串中包含非ASCII字符时,如何将C字符串(char数组)转换为Python字符串?

PyString_Depre这样做:

PyObject *PyString_Depre(const char *s,   Py_ssize_t size,   const char *encoding,   const char *errors){    PyObject *v, *str;    str = PyString_FromStringAndSize(s, size);    if (str == NULL)    return NULL;    v = PyString_AsDepredString(str, encoding, errors);    Py_DECREF(str);    return v;}

IOW,它基本上完成了第二个示例中的操作-
转换为字符串,然后对该字符串进行解码。这里的问题来自于PyString_AsDepredString,而不是PyString_AsDepredObject。PyString_AsDepredString会执行PyString_AsDepredObject,但随后尝试将生成的unipre对象转换为具有默认编码的字符串对象(对您来说,看起来像是ASCII)。那就是失败的地方。

我相信您需要进行两次调用-但您可以使用PyString_AsDepredObject而不是调用python的“ depre”方法。就像是:

#include <Python.h>#include <stdio.h>int main(int argc, char *argv[]){     char c_string[] = { (char)0x93, 0 };     PyObject *py_string, *py_unipre;     Py_Initialize();     py_string = PyString_FromStringAndSize(c_string, 1);     if (!py_string) {          PyErr_Print();          return 1;     }     py_unipre = PyString_AsDepredObject(py_string, "windows_1252", "replace");     Py_DECREF(py_string);     return 0;}

我不完全确定PyString_Depre以这种方式工作的原因是什么。python-
dev上的
一个很老的线程似乎表明它与链接输出有关,但是由于Python方法没有做同样的事情,所以我不确定这是否仍然有用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368630.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号