2017-05-03 44 views
2

如何將unicode/utf-8寫入MemoryStore中的文件?將unicode/utf-8數據寫入內存文件

一般情況下我可以做以下

fs := FileSystem workingDirectory. 
file := fs/'file.txt'. 
file writeStreamDo: [ :stream | stream << '彼得' ]. 
file contents. "'彼得'" 

stream有一個MultiByteFileStream

然而,當我嘗試做存儲器一樣,我和了錯誤

fs := FileSystem memory. 
file := fs/'file.txt'. 
file writeStreamDo: [ :stream | stream << '彼得' ]. 

Error: Improper store into indexable object

因爲stream有一個普通的WriteStream

我試圖通過直接實例化MultiByteFileStream來解決這個問題,但是這似乎需要真正的文件。

還有別的辦法嗎?

+0

你試圖製作哪種編碼?取決於你可以先得到'ByteArray'編碼你的unicode'String',然後把它發送到'stream'。 –

+0

@LeandroCaniglia內容應該在utf8 –

+0

然後嘗試'file writeStream nextPutAll:'彼得'utf8Encoded'。 –

回答

2

它看起來像內存文件系統默認是不處理多字節文件。嘗試:

| fs file stream | 

fs := FileSystem memory. 
file := fs/'file.txt'. 
stream := MultiByteBinaryOrTextStream on: (fs open: file writable: true). 
stream converter: UTF8TextConverter new. 
[ stream << '彼得' ] ensure: [ stream close ]. 
file. 
1

這裏是一個表達式會做你在找什麼:

string := '彼得'. 
file writeStreamDo: [:stream | 
    #utf8 asZnCharacterEncoder 
    next: string size 
    putAll: string 
    startingAt: 1 
    toStream: stream] 
1
(FileSystem memory root/'foo.txt') 
    writeStreamDo: [ :out | 
    out binary. 
    (ZnCharacterWriteStream on: out encoding: #utf8) << '彼得' ]. 

應該工作。