python - SWIG、Python 和 unicode 字符串
问题描述
我正在使用 SWIG 开发一个 Python 模块并与某个库链接。我有一个如下的类型图:
%typemap(in) MyStringType {
char* buffer = 0;
size_t size = 0;
int alloc = SWIG_OLDOBJ;
int res = SWIG_AsCharPtrAndSize( $input, &buffer, &size, &alloc );
if (!SWIG_IsOK(res)) {
SWIG_exception_fail(SWIG_TypeError, "in method '$symname', expecting string");
}
$1.p = buffer;
$1.n = size - 1;
}
我有一些函数将 MyStringType 作为参数作为参数:
void myFunc(MyStringType type);
然后,当我创建 python 模块时,我在 python 2.7 中执行以下操作:
myFunc("Test string")
但是,当我尝试使用 Python 3.4 时,我得到以下信息:
TypeError: in method 'myFunc', expecting string
我可以通过将它添加到 swig 接口文件来解决这个问题:
%begin %{
#define SWIG_PYTHON_STRICT_UNICODE_WCHAR
%}
这解决了问题。但是我仍然需要再添加一个宏,因为其他一些功能需要它。所以,现在是这样的:
%begin %{
#define SWIG_PYTHON_STRICT_BYTE_CHAR
#define SWIG_PYTHON_STRICT_UNICODE_WCHAR
%}
这会让我这样称呼 myFunc:
myFunc(b"Test string")
对于 python 2.7、3.4 和 3.5,在我的电脑中使用 tox 时一切正常,但在 travis-ci 中失败。在“测试字符串”之前删除 b 后,它在 travis-ci 中成功,但在我的电脑中失败。在 travis-ci 中,我有:python:2.7.6、3.4.3 在我的电脑中:python:2.7.13、3.4.8
知道为什么吗?
解决方案
解决了。感谢所有提示。这是不同的痛饮版本。
推荐阅读
- javascript - 嵌入式视频 (Vimeo) 页面加载优化
- python - 如何将所选元素与行中的总和值相除,对角线 PANDAS 上的值除外
- javascript - 如何从javascript中的函数返回值
- javascript - 返回模式最后一次出现的编号
- node.js - 无法读取日志文件的行
- spring-boot - 如何在没有spring boot gradle插件的情况下在gradle中使用spring boot
- npm - angular-cli 不断抛出错误:找不到模块'source-map'
- sql - 如何修复 oracle ORA-01722 无效号码错误
- python - 无法正确拆分列表中的项目
- pandas - 如何在 dask 环境中使用 pd.groupby.transform 改进功能