在调用C+;时,如何防止python中出现特定于平台的ValueError+;密码? 我正在研究一个调用C++代码的Python脚本。当C++代码编译在CygWin(克利永)环境中,当我在Windows中运行脚本时,它工作得很好。然而,我使用CyLon在Linux(Ubuntu,WSL)中创建.so文件,使用相同的代码和CGube文件。C++代码编译两个PATSUM。我的python代码在这两种平台上运行(python 3.5)。但是,我在Linux中遇到了一个错误 这是我的C++代码。< /P> #include <iostream> wchar_t * DoSomeThingUseful(wchar_t * input) { wchar_t* output = new wchar_t[2]; output[0] = input[0]; output[1] = 'x'; return output; } extern "C" { wchar_t * GetJsonFromJson(wchar_t * input) { wchar_t * output = DoSomeThingUseful(input); return output; } }

在调用C+;时,如何防止python中出现特定于平台的ValueError+;密码? 我正在研究一个调用C++代码的Python脚本。当C++代码编译在CygWin(克利永)环境中,当我在Windows中运行脚本时,它工作得很好。然而,我使用CyLon在Linux(Ubuntu,WSL)中创建.so文件,使用相同的代码和CGube文件。C++代码编译两个PATSUM。我的python代码在这两种平台上运行(python 3.5)。但是,我在Linux中遇到了一个错误 这是我的C++代码。< /P> #include <iostream> wchar_t * DoSomeThingUseful(wchar_t * input) { wchar_t* output = new wchar_t[2]; output[0] = input[0]; output[1] = 'x'; return output; } extern "C" { wchar_t * GetJsonFromJson(wchar_t * input) { wchar_t * output = DoSomeThingUseful(input); return output; } },python,c++,linux,cross-platform,Python,C++,Linux,Cross Platform,下面是python代码 from ctypes import * import os.path import platform print('Hello') operating_system = platform.system() if operating_system == 'Windows': library_path = 'C:/Users/Daant/CLionProjects/Share/cmake-build-release/cygExternalFacade.dll' el

下面是python代码

from ctypes import *
import os.path
import platform
print('Hello')
operating_system = platform.system()
if operating_system == 'Windows':
    library_path = 'C:/Users/Daant/CLionProjects/Share/cmake-build-release/cygExternalFacade.dll'
else:
    library_path = '/mnt/c/Users/Daant/CLionProjects/Share/cmake-build-release/libExternalFacade.so'

itExist = os.path.exists(library_path)
print(itExist)
lib = cdll.LoadLibrary(library_path)
print('dll loaded')
lib.GetJsonFromJson.restype = c_wchar_p
input = c_wchar_p('aaa')
memoRefToOutput = lib.GetJsonFromJson(input)
print(memoRefToOutput)
print('End')
以下是在Windows上运行时的输出

Hello
True
dll loaded
ax
End
下面是在Linux上运行它时的输出

Hello
True
dll loaded
Traceback (most recent call last):
  File "CallFacade.py", line 17, in <module>
    memoRefToOutput = lib.GetJsonFromJson(input)
ValueError: character U+214bae0 is not in range [U+0000; U+10ffff]
你好 真的 加载的dll 回溯(最近一次呼叫最后一次): 文件“CallFacade.py”,第17行,在 memoRefToOutput=lib.GetJsonFromJson(输入) ValueError:字符U+214bae0不在范围[U+0000;U+10ffff]
我不明白为什么我的代码可以在Windows上正常工作,但不能在Linux上正常工作。Ctypes是Ctypes。。。。有人能解释我应该如何修复它吗?< /P>可能与<代码> W查尔特特< /Code >和C++的Unicode支持有改进的空间。你能用UTF-8做所有事情吗?对于这两个文件,(C++和python),我已经使用了UTF-8。那么就不要对UTF-8使用
wchar\t
。在C
wchart\u t
中,编译器是依赖的,因此这可能与您出错的原因有关。我的猜测是,clion在检查某些内容是否在Unicode范围内时更为严格<代码>21bae0超出了错误提示的Unicode字符范围。
Hello
True
dll loaded
Traceback (most recent call last):
  File "CallFacade.py", line 17, in <module>
    memoRefToOutput = lib.GetJsonFromJson(input)
ValueError: character U+214bae0 is not in range [U+0000; U+10ffff]