我的系統由一個C++主要部分組成,它作爲複雜進程的核心。該核心負責執行執行多項任務的Python腳本,然後在基於HTML技術的圖形用戶界面上顯示這些腳本。這個HTML文檔是使用WTL加載的,但是它並沒有那麼相關,因爲在python上生成的信息達到這一點之前,我的問題就出現了。關於在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)
然後我將此信息發送到C++使用適當的API調用: API_Call是執行並返回蟒生成的字符串的方法。
PyObject *json_string;
json_string = API_Call();
char * c_str;
c_str = PyString_AsString(json_string);
如果我執行這些行我得到奇怪的字符和破碎的數據,而如果我替代原有代碼的Python爲這樣:
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的輸出。
您是否嘗試過在Python代碼中記錄'json_str'(或'my_python_dict')? – 2014-09-04 07:48:38
是的,我做過。我甚至試圖從python控制檯打印json_string,並在控制檯中替換僞測試字符串作爲輸出,並且完美地工作。 – 2014-09-04 07:50:13
https://docs.python.org/2/library/json.html#json.JSONEncoder 有一些關於轉義非ASCII字符的爭論。你有沒有嘗試改變這些選項? 你也試過使用json.dumps(my_python_dict)嗎? – gosom 2014-09-04 07:52:58