亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python到C ++字符編碼

Python到C ++字符編碼

慕少森 2021-03-31 07:07:10
我有一個使用Python C / API來為數據庫信息調用Python腳本的C ++程序,但是接收到的數據沒有以正確的方式編碼。這是在法國,因此我的數據包含重音符號和其他非英語字符。在sys.defaultencoding設置為“ utf-8”的python終端中,示例:    >>> robin = 'testé'    >>> robin    'test\x82'    >>> print robin    testé    >>> str(robin)    'test\x82'如果我打電話給:    PyString_AsString(PyObject_Repr(PyObject_GetAttrString(/*PyObject of my Py_Init*/, "robin")));我得到一個充滿以下內容的字符*:test \ x82從中創建一個字符串或wstring會得到相同的結果。我希望能夠創建一個表示“testé”的字符串,并且我猜想首先要能夠在python終端中正確輸出變量,如下所示:    >>> robin = 'testé'    >>> robin    'testé'我嘗試了Django的encode()encode(),sys.setdefaultencoding,sys.stdout.encoding,甚至是一些force_text和force_bytes。似乎沒有什么可以讓我得到包含我實際字符的標準C ++字符串的。任何幫助將不勝感激。僅供參考-Python 2.7,Windows 8 x64,VS2012和C ++ 9編輯以回答評論:    >>> import sys    >>> reload(sys)    <module 'sys' (built-in)>    >>> sys.setdefaultencoding('utf-8')    >>> sys.getdefaultencoding()    'utf-8'    >>> robin = 'testé'    >>> robin    'test\x82'    >>> print robin    testé我只希望“打印”能夠正確顯示信息...
查看完整描述

3 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

這并不像看起來那樣簡單,我錯了,utf-8中的急性e是c3 a9。使用python的解釋器從控制臺使用編碼非常困難。您必須正確對待幾件事。

首先,您的控制臺默認代碼頁(編碼)。您可以通過發出chcp命令來檢查。我的是437,但幾乎不依賴于Windows安裝。

latin-1的代碼頁為28591,而utf-8的代碼頁為65001。奇怪的是,當控制臺的代碼頁為65001時,使用python解釋器很復雜,似乎尚未聲明它是utf-8python編碼庫中的同義詞。

我的意思是,您必須正確地對待自己的想法。如果您的控制臺在代碼頁X中,則您對python解釋器的輸入將以X編碼,您將看到X能夠管理字節的輸出。

我建議您在python中使用unicode而不是硬編碼的字符串,并使用scape字節代替字符。例如,您可以這樣聲明robin:

robin = u'test\xe9'

U + 00E9是é的代碼。之后,robin是unicode,可以encoded像這樣進入任何您想要的環境:robin.encode('utf-8')。這樣,您可以控制變量以針對每種可能的輸出方案以任何編碼對其進行編碼。

要恢復它:

  1. 找出控制臺的編碼

  2. encoderobin根據此編碼的變量

  3. 控制臺應正確輸出

希望這會有所幫助!


查看完整回答
反對 回復 2021-04-01
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

您調用PyObject_Reprrepr(robin)Python中相同的方法,并產生文字字符\x82。將其從您的通話鏈中刪除。


查看完整回答
反對 回復 2021-04-01
  • 3 回答
  • 0 關注
  • 245 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號