Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将unicode/utf-8数据写入内存文件_Unicode_Smalltalk_Memorystream_Pharo - Fatal编程技术网

将unicode/utf-8数据写入内存文件

将unicode/utf-8数据写入内存文件,unicode,smalltalk,memorystream,pharo,Unicode,Smalltalk,Memorystream,Pharo,如何将unicode/utf-8写入MemoryStore中的文件 通常我可以做以下几件事 fs := FileSystem workingDirectory. file := fs / 'file.txt'. file writeStreamDo: [ :stream | stream << '彼得' ]. file contents. "'彼得'" 错误:不正确地存储到可索引对象中 因为stream有一个普通的WriteStream 我试图通过直接实例化多字节文件流来解决这个问

如何将unicode/utf-8写入MemoryStore中的文件

通常我可以做以下几件事

fs := FileSystem workingDirectory.
file := fs / 'file.txt'.
file writeStreamDo: [ :stream | stream << '彼得' ].
file contents. "'彼得'"
错误:不正确地存储到可索引对象中

因为
stream
有一个普通的
WriteStream

我试图通过直接实例化
多字节文件流
来解决这个问题,但这似乎需要真正的文件


还有其他方法吗?

这里有一个表达式可以满足您的需要:

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.
| fs文件流|
fs:=文件系统内存。
文件:=fs/'file.txt'。
stream:=MultiByteBinaryTextStream on:(fs打开:文件可写:true)。
流转换器:UTF8TextConverter新建。
[流
(文件系统内存根/'foo.txt')
writeStreamDo:[:输出|
输出二进制文件。

(ZnCharacterWriteStream on:out encoding:#utf8)您试图生成什么编码?根据这一点,您可以首先通过数组
对unicode
字符串
进行编码,然后将其发送到
@LeandroCaniglia。内容应为utf8格式,然后尝试
文件writeStream Next:'彼得' UTF8编码
| 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) << '彼得' ].