2013-07-09 119 views
0

我正在運行的是我所假設的一些奇怪的編碼錯誤,但它真的讓我莫名其妙。基本上我試圖寫一個unicode字符串作爲圖像的文件,並且字符串表示法打印正常。儘管打印完全正確,Python仍然無法寫入文件

ìԉcïԁiԁúлt cúɭpâ ρáncéttá, ëɑ ëɭìt haϻ offícìà còлѕêɋûät. Sunt ԁësërúлt 

,但無論如何我嘗試寫串出任何相關的地方,我得到標準的ASCII編碼錯誤:

UnicodeEncodeError: 'ascii' codec can't encode characters 0-3: ordinal not in range 128 

我試過設置我的源文件的編碼,並確保我的系統變量沒有設置爲ascii,我試過直接輸出到文件通過:

python script.py > output.jpg 

並沒有一個似乎有任何影響。我不能解決一個簡單的編碼問題,我感到有點無聊,但我真的不知道ascii編解碼器現在甚至來自哪裏。

相關代碼:

def random_image(**kwargs): 
    image_array = numpy.random.rand(kwargs["dims"][0], kwargs["dims"][1], 3)*255 
    image = Image.fromarray(image_array.astype('uint8')).convert('RGBA') 
    format = kwargs.get("format", "JPEG") 
    output = StringIO.StringIO() 
    image.save(output, format=format) 
    content = output.getvalue() 
    output.close() 
    content = [str(ord(char)) for char in content] 
    return content 
+0

請包括您的代碼和完整的回溯。這是一個Unicode值還是一個字節字符串? –

+0

@MartijnPieters這就是事實,這實際上是完整的追溯。除了完全依靠自身完美的印刷聲明之外,它幾乎沒有任何意義。 –

+0

但是,無論如何,這對我們來說都是有趣且有用的信息。 –

回答

1

的第一個問題是,爲什麼你圖片的內容存儲在一個Unicode字符串的形式?圖像通常包含任意八位字節,應該用str(Python 3中的bytes)表示,而不是unicode類型。

將Unicode字符串打印到屏幕時,將根據環境設置選擇編碼。當您將其打印到文件中時,您需要指定編碼,否則假定爲ascii。爲了讓你的程序默認文件更加健全,請從下面開始:

encoding = sys.stdout.encoding or 'utf-8' 
sys.stdout = codecs.getwriter(encoding)(sys.stdout, errors='replace') 
+0

嗯......它現在寫道,但不正確,我應該使用base64嗎? –

+0

啊,沒關係,只是不得不刪除物料清單,至於unicode字符串的東西,這很愚蠢,但它與其他開發人員關於理想是什麼的想法相互作用,所以我沒有什麼選擇。 –

+0

其他字節在Python 2中完全可用。 –

相關問題