我想在Prolog中编写一个处理二进制数据的程序。它应以UNIX方式运行,即如果没有给出参数,则应从stdin
/ user_input
读取并写入stdout
/ user_output
以充当在管道中过滤。
只要我的数据是文本的,一切都运行正常,但是一旦我的数据是二进制的,输出就很奇怪而且完全不符合我的预期,有时我得到像Illegal multibyte Sequence
这样的奇怪消息。使用open/3
打开的流也是如此。
答案 0 :(得分:2)
默认情况下,user_input
和user_output
设置为type(text)
和encoding(X)
,其中X
是从环境派生的平台的编码。如果要处理二进制数据,则需要将流的类型更改为type(binary)
或将流的编码更改为encoding(octet)
。您可以使用set_stream/2
执行此操作,如下所示:
:- set_stream(user_input, type(binary)).
:- set_stream(user_output, type(binary)).
或
:- set_stream(user_input, encoding(octet)).
:- set_stream(user_output, encoding(octet)).
对于您自己打开的流,您也可以使用open(Filename, read, StreamIn,
[type(binary)]
)
或{{1}来使用open/4
。 }的 open(Filename, read, StreamIn,
强> [encoding(octet)]
。
当您正在阅读的内容实际上是二进制数据时,)
是首选方法。