我似乎無法找到Python3中io.StringIO
的默認編碼是什麼。與stdio
一樣,它的語言環境如何?python3中的io.StringIO編碼
我該如何改變它?
隨着stdio
,似乎只是重新打開正確的編碼作品,但沒有重新打開StringIO
這樣的事情。
我似乎無法找到Python3中io.StringIO
的默認編碼是什麼。與stdio
一樣,它的語言環境如何?python3中的io.StringIO編碼
我該如何改變它?
隨着stdio
,似乎只是重新打開正確的編碼作品,但沒有重新打開StringIO
這樣的事情。
類io.StringIO
作品可以用Python 3也就是說str
對象,你只能讀取,並從StringIO
實例寫串。沒有編碼 - 如果要將StringIO
中獲得的字符串編碼到bytes
對象中,但必須選擇其中一個,但字符串本身沒有編碼。
(當然,字符串需要在一些編碼在內部表示。根據你的解釋,該編碼或者是UCS-2或UCS-4,但與Python工作時,你看不到這個實現細節。)
正如在另一個答案中已經提到的,StringIO
將(unicode)字符串保存在內存中,因此沒有編碼。 如果你確實需要一個類似的編碼對象,你可能想看看BytesIO
。
如果你想設置stdout的編碼:你不能。至少不是直接的,因爲sys.stdout.encoding
是隻寫的(通常)由Python自動確定。 (在使用管道時不起作用) 如果要將具有特定編碼的字節字符串寫入標準輸出,那麼您要麼使用正確的編碼(Python 2)編碼您打印的字符串,要麼使用sys.stdout.buffer.write()
(Python 3)發送已經將字節串編碼爲標準輸出。
引用「沒有編碼」:如果我執行'stdout = io.StringIO()',那麼哪個編碼標準print()會有什麼? – 2012-02-20 21:51:21
@GiovanniFunchal:仍然沒有,因爲你寫的所有字符串仍然是字符串。他們沒有編碼。 – 2012-02-20 21:52:34
因此,如果我在開始時使用'#coding:utf-8',緩衝區中print(「foo」)的編碼將是'utf-8'? – 2012-02-20 21:58:49