python - 测试可转换字符的 wchar_t*

标签 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 字符串的方法,那将是受欢迎的。 :) 谢谢!

最佳答案

很明显,正如您所发现的,对输入数据进行零终止非常重要。

关于最后一段,我将从宽转换为 UTF8 并调用 PyUnicode_FromString .

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

关于python - 测试可转换字符的 wchar_t*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7209502/

相关文章:

带有通过标准输入传递的目标的 CreateProcessW - 找不到目标

c - 使用 printf 显示宽字符

c - 如何将多个旋转按钮值传递给函数?(GTK/C)

c++ - 没有空格的宏

python - 如何使用简单的方法循环图片中每个像素的每个 channel ?

python - 如何使用 NumPy C API 创建数组切片?

python - 使用 PIL 在 python 2.7 中将文本写入图像

python - 循环不会进入 if-else 循环中的 else 部分

正在复制字符串 :while loop breaks on the first condtion only using C

c - 字符串、获取和执行