2017-05-03 5 views
2

MemoryStoreのファイルにunicode/utf-8を書き込むにはどうすればよいですか?unicode/utf-8データをメモリファイルに書き込む

通常、私はちょうど

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

stream次の操作を行うことができMultiByteFileStreamがあります。

しかし、私は普通のWriteStreamがあるstreamので、私とエラー

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

Error: Improper store into indexable object

とまで、メモリストレージに同じことをしようとします。

私は実際にファイルを必要としているようですが、MultiByteFileStreamを直接インスタンス化して回避しようとしました。

別の方法がありますか?ここで

+0

生成しようとしているエンコードは何ですか?それに応じて、まずあなたのユニコード 'String'をエンコードした' ByteArray'を取得し、それを '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) << '彼得' ]. 

は動作するはずです。

関連する問題