将 unicode/utf-8 数据写入内存文件
Writing unicode/utf-8 data to a memory file
如何将 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 << '彼得' ].
Error: Improper store into indexable object
因为stream
有一个普通的WriteStream
.
我试图通过直接实例化 MultiByteFileStream
来解决它,但这似乎需要真实文件。
还有其他方法吗?
这里有一个表达式可以满足您的需求:
string := '彼得'.
file writeStreamDo: [:stream |
#utf8 asZnCharacterEncoder
next: string size
putAll: string
startingAt: 1
toStream: stream]
看起来内存文件系统默认不处理多字节文件。尝试:
| 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.
(FileSystem memory root / 'foo.txt')
writeStreamDo: [ :out |
out binary.
(ZnCharacterWriteStream on: out encoding: #utf8) << '彼得' ].
应该可以。
如何将 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 << '彼得' ].
Error: Improper store into indexable object
因为stream
有一个普通的WriteStream
.
我试图通过直接实例化 MultiByteFileStream
来解决它,但这似乎需要真实文件。
还有其他方法吗?
这里有一个表达式可以满足您的需求:
string := '彼得'.
file writeStreamDo: [:stream |
#utf8 asZnCharacterEncoder
next: string size
putAll: string
startingAt: 1
toStream: stream]
看起来内存文件系统默认不处理多字节文件。尝试:
| 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.
(FileSystem memory root / 'foo.txt')
writeStreamDo: [ :out |
out binary.
(ZnCharacterWriteStream on: out encoding: #utf8) << '彼得' ].
应该可以。