我遇到了涉及加密字符串的問題。我正在做的是使用ord()
函數將每個字母轉換爲數字,然後將其轉換爲二進制代碼。然後我倒置或異或的數字,以便對於字母'A
'有二進制代碼'0100 0001
'將成爲'1011 1110
'當轉換回十進制值將是190
,我將chr()回到一個字母。我注意到某些字母不會轉換成任何可以看到的符號。當我試圖將157
的十進制值轉換爲ASCII
字符時。我得到'\x9d
'而不是ASCII值。根據擴展ASCII碼,它應該給我一個符號,我可以用打印功能讀取它,並將其打印到文件中。有沒有辦法讓Python將它打印成可讀的符號,以便我可以打印它?現在我無法使它工作,因爲程序無法將它打印成符號,我可以讀取並反轉該過程。通過二進制操作加密字符串
0
A
回答
0
Python默認顯示字符串的表示,除非您明確地打印它們。 \x9d
是字符的repr
(表示),如果你打印出來,你會看到別的東西,這取決於編碼和字體您的終端使用
>>> chr(157)
'\x9d'
>>> print repr(chr(157)) # equivalent to the above
'\x9d'
>>> print chr(157)
� # this appears as a question mark in a diamond shaped box on my system
這並不雖然數據寫入文件阻止你。
編輯
如果「擴展ASCII」你指的是該字符集http://en.wikipedia.org/wiki/Code_page_437,你應該能夠使用
>>> print chr(157).decode('CP437')
¥
這將返回適於印刷的unicode字符串(如果您的終端支持)。
EDIT 2
這是在Python 3.x作爲ord
返回一個Unicode STR有點不同。相反,你想要一個bytes
STR(這相當於一個Python2.x STR):
>>> bytes([157]) # this is equivalent to ord(157) in Python 2.x
b'\x9d'
>>> bytes([157]).decode('cp437') # decode this to a unicode str with the desired encoding
'¥'
>>> print(bytes([157]).decode('cp437')) # now it's suitable for printing
¥
確保當你寫,你寫的原始bytes
STR的數據文件,而不是UNICODE(打印)STR :
>>> data = bytes([154, 155, 156, 157])
>>> print (data.decode('cp437')) # use decode for printing
Ü¢£¥
>>> with open('output.dat', 'wb') as f:
... f.write(data) # but not for writing to a file
...
4
>>> with open('output.dat', 'rb') as f:
... data = f.read()
... print(data)
... print(data.decode('cp437'))
...
b'\x9a\x9b\x9c\x9d'
Ü¢£¥
相關問題
- 1. 款待字符串作爲二進制和做二進制操縱在Perl
- 2. 隨機移位加密的二進制字符串
- 3. 加入兩個二進制字符串
- 4. 大型二進制字符串的Python按位操作
- 5. 通過添加單個字符的javascript字符串操作
- 6. 字符串到二進制[]
- 7. Json_encode二進制字符串
- 8. 字符串爲二進制
- 9. 二進制字符串
- 10. 通過網絡加密字符串,c#
- 11. 互動字符串操作通過JavaScript
- 12. 十六進制字符串到二進制字符串
- 13. 二進制字符串到十六進制字符串java
- 14. Ruby:十六進制字符串到二進制字符串
- 15. 作爲二進制操作的加法
- 16. 通過流的二進制與字符串傳輸
- 17. 如何通過LUA字符串(二進制)到C++使用tolua ++
- 18. 如何通過二進制數組執行一個二進制操作?
- 19. 將二進制字符串轉換爲二進制文字
- 20. 無效的二進制操作符^
- 21. 串聯二進制值NVARCHAR字符串
- 22. Python二進制文件操作加速
- 23. PHP:符號二進制字符串
- 24. Java |二進制字符串到字節
- 25. 添加操作字符串
- 26. Android:加密字符串,通過HTTPS發送和解密字符串問題
- 27. 通過添加散列來防止查詢字符串操作?
- 28. 通過file_get_contents限制字符串加載
- 29. MySQL比較二進制排序與二進制字符串
- 30. 將二進制字符串轉換爲二進制
我剛剛試了一下在Python IDLE殼牌和它說: 「語法錯誤:無效的語法」,然後我使用打印(___)(___是CHR(157).decode( 'CP437' 試過) ,它也沒有工作,它說:「AttributeError:'str'對象沒有'decode'屬性,我嘗試着不打印,同樣的問題,str沒有解碼,我使用Python IDLE 3.3。 2,我知道這是不同的從2.x python租用。有什麼建議麼?我同時使用了dir和help,在chr()中沒有解碼也沒有編碼。 – user3444888
@ user3444888我已經用Python 3.x的代碼更新了答案。 –
謝謝!有效!有沒有辦法扭轉它?當我嘗試使用ord()時,它給了165,但初始值爲157. – user3444888