测试wchar_t *是否为可转换字符

时间:2011-08-26 19:15:22

标签: python c widechar

我正在与一个处理字符串作为wchar_t数组的库进行交谈。我需要将它们转换为char数组,以便我可以将它们交给Python(使用SWIG和Python的PyString_FromString函数)。显然,并非所有宽字符都可以转换为字符。根据wcstombs的文档,我应该能够做类似

的事情
wcstombs(NULL, wideString, wcslen(wideString))

测试不可转换字符的字符串 - 如果有的话,它应该返回-1。但是,在我的测试用例中,它总是返回-1。这是我的测试功能:

void getString(wchar_t* target, int size) {
    int i;
    for(i = 0; i < size; ++i) {
        target[i] = L'a' + i;
    }
    printf("Generated %d characters, nominal length %d, compare %d\n", size, 
            wcslen(target), wcstombs(NULL, target, size));
}    

这样生成输出:

Generated 32 characters, nominal length 39, compare -1
Generated 16 characters, nominal length 20, compare -1
Generated 4 characters, nominal length 6, compare -1

知道我做错了什么吗?

在相关的说明中,如果您知道直接从wchar_t * s转换为Python unicode字符串的方法,那将是受欢迎的。 :)谢谢!

1 个答案:

答案 0 :(得分:0)

显然,正如您所发现的那样,必须将输入数据置零。

关于最后一段,我会从宽转换为UTF8并拨打PyUnicode_FromString

请注意,我假设您使用的是Python 2.x,它可能在Python 3.x中有所不同。