Access Error: invalid UTF-8 encoding ${FFD8FFE0}

Access Error: invalid UTF-8 encoding ${FFD8FFE0}

目前还没有关于红色的书籍,因为它太新了。因此,我正在尝试遵循一本旧的 Rebol 书籍并从中尽可能地挽救。

我发现了一些命令,例如 read 由于文件编码问题我无法执行代码。

 save %/c/users/abagget/desktop/bay.jpg read http://rebol.com/view/bay.jpg
 Access Error: invalid UTF-8 encoding: #{FFD8FFE0}

在 Rebol 中这^应该是 read/binary 和 write/binary

 >> write %/c/alex.txt read http://google.com
 *** Access Error: invalid UTF-8 encoding: #{A050726F}

有没有办法将传入的内容转换为 UTF-8,以便我进行读取? 或者是否有其他类型的读取处理非 UTF-8?

In Rebol this^ would have been read/binary and write/binary

在 Red 中也是如此,save 用于将 Red 数据类型转换为二进制格式的序列化文本。所以如果你想 save 到一个 JPEG 文件,你需要提供一个 image! 值。 read 获取了一个文本内容(目前限制为UTF-8),所以你的用法是无效的。正确的行应该是:

 write/binary %/c/users/abagget/desktop/bay.jpg read/binary http://rebol.com/view/bay.jpg

Is there a way to convert incoming content to UTF-8 so I can do the read?

要从非 UTF-8 文本资源中获取字符串,您需要以二进制形式获取资源,然后编写一个适用于常见 Latin-1 编码的穷人转换器:

bin-to-string: function [bin [binary!]][
    text: make string! length? bin
    foreach byte bin [append text to char! byte]
    text
]

从控制台使用它:

>> bin-to-string read/binary http://google.com
== {<!doctype html><html itemscope="" itemtype="http://schema.org...

Red 将在未来为常用的文本编码提供适当的转换器。同时,你可以使用这样的函数,或者为你最常用的编码编写一个合适的解码器(使用转换table)。