我需要从Python脚本中调用一个C库,它将字符串解析为double并打印结果。
解析是否有效取决于我使用的IDE。我的操作系统是Debian 11,下面是一个很小的例子。
库(文件test.c):
#include <stdio.h>
#include <stdlib.h>
void func(char * c){
printf("Argument as string: %s\n",c);
printf("Argument converted to double: %lf\n",strtod(c,NULL));
}它是在一个终端中编译的,其中包括:
gcc -shared -o test.so -Wall test.cPython脚本调用库并使用ctype(文件test.py)传递字符串参数:
# -*- coding: utf-8 -*-
import ctypes as ct
# Load the library
lib = ct.cdll.LoadLibrary("./test.so")
# Run my function
lib.func('356.5684'.encode('utf8'))我从一个终端运行这个脚本
python3 test.py我得到了
Argument as string: 356.5684
Argument converted to double: 356.568400它如预期的那样工作。当我使用Eric-ide运行这个脚本时,它也能工作。但是,当我使用Spyder或Pyzo运行这个脚本时,我得到:
Argument as string: 356.5684
Argument converted to double: 356,000000只有整数部分被转换,逗号被用作小数分隔符,而不是点。我怀疑是编码问题。我在Python中尝试了'356.5684'.encode('ascii'),但问题仍然存在。
你有什么想法吗?
发布于 2021-12-25 14:39:37
谢谢KamilCuk。问题解决了。我在这里遵循了“标准”一节:https://wiki.debian.org/Locale。
我生成了区域设置en_US.utf8,然后选择它作为默认设置。重新启动,现在转换从字符串到双重工作,甚至与Spyder和Pyzo。
https://stackoverflow.com/questions/70479552
复制相似问题