如何将unicode / utf-8写入MemoryStore中的文件?
通常我可以做以下
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 << '彼得' ].
错误:存储到可索引对象中的不正确
因为stream
有一个普通的WriteStream
。
我试图通过直接实例化MultiByteFileStream
来解决它,但这似乎需要真实的文件。
还有其他办法吗?
答案 0 :(得分:3)
默认情况下,内存文件系统看起来不会处理多字节文件。尝试:
| 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 :(得分:1)
这是一个表达式,可以满足您的需求:
string := '彼得'.
file writeStreamDo: [:stream |
#utf8 asZnCharacterEncoder
next: string size
putAll: string
startingAt: 1
toStream: stream]
答案 2 :(得分:1)
(FileSystem memory root / 'foo.txt')
writeStreamDo: [ :out |
out binary.
(ZnCharacterWriteStream on: out encoding: #utf8) << '彼得' ].
应该有用。