2014-09-04 2 views
2

내 시스템은 복잡한 프로세스의 핵심 역할을하는 C++ 주요 부분으로 구성됩니다. 이 코어는 여러 작업을 수행 한 다음 HTML 기술을 기반으로 그래픽 사용자 인터페이스에 표시하는 Python 스크립트를 실행하는 작업을 담당합니다. 이 HTML 문서는 WTL을 사용하여로드되지만 파이썬에서 생성 된 정보가 그 지점에 도달하기 전에 내 문제가 발생하기 때문에 관련이 없습니다. Python으로 좋은 JSON 문자열을 생성하는 경우

import json 
#my_python_dict is the Python dictionary information I want to send to C++ -> Javascript. 
json_str = json.JSONEncoder().encode(my_python_dict) 

은 그 때 나는 적절한 API 호출을 사용하여 C++이 정보를 보내 API_Call 파이썬에서 생성 된 문자열을 실행하고 반환하는 방법이다. 내가 그 라인을 실행하면

PyObject *json_string; 
json_string = API_Call(); 
char * c_str; 
c_str = PyString_AsString(json_string); 

나는 이상한 문자와 깨진 데이터를 얻을 나는이 파이썬에서 원래의 코드를 대체 할 경우 반면 :

import json 
#my_python_dict is the Python dictionary information I want to send to C++ -> Javascript. 
#json_str = json.JSONEncoder().encode(my_python_dict). 
json_str = "This is a dummy test... of random lenght..." 

그것은, 내가 말을 단지 완벽 감히 작품 문제는 아마도 json.JSONEncoder() 또는 json.JSONEncoder 및 PyString_AsString() 내의 코딩 문제 일 수 있습니다.

아이디어가 있으십니까?

====================== P.D. ====================

나는 몇 가지 아이디어를 순서대로 시도해왔다. 이 문제를 해결하려고합니다.

  • 가장 충격적인 내용은 다음과 같습니다. 디버그 콘솔에서 인코딩 된 문자열을 복사하여 더미 문자열에 붙여 넣은 다음 해당 문자열을 반환하면 모든 것이 정상적으로 작동합니다. 하지만 json.JSONEncoder의 출력이 필요합니다.
+0

파이썬 코드에서'json_str' (또는'my_python_dict')을 로깅 해 보셨습니까? –

+0

예. 나는 심지어 파이썬 콘솔에서 json_string을 인쇄하려고 시도했고 콘솔의 출력을 더미 테스트 문자열로 대체하여 완벽하게 작동했습니다. –

+0

https://docs.python.org/2/library/json.html#json.JSONEncoder 에는 비 ASCII 문자 이스케이프에 대한 몇 가지 인수가 있습니다. 이러한 옵션을 변경해 보셨습니까? 또한 json.dumps (my_python_dict)를 사용해 보셨습니까? – gosom

답변

1
대답에

변환 코멘트 ...

당신이 c_str의 내용을 검사합니까? c_str의 내용을 사용하기 전에 json.JSONEncoder().encode()에 의해 생성 된 Python 문자열 개체가 할당 해제되거나 수정되지 않았는지 확인하십시오.