访问错误:无效的 UTF-8 编码 ${FFD8FFE0}

Ale*_*ett 2 encoding utf-8 red

现在还没有任何关于红色的书,因为它太新了。因此,我正在尝试遵循一本旧的 Rebol 书,并从中挽救我能得到的东西。

我发现一些命令由于read文件编码而无法执行代码。

 save %/c/users/abagget/desktop/bay.jpg read http://rebol.com/view/bay.jpg
 Access Error: invalid UTF-8 encoding: #{FFD8FFE0}
Run Code Online (Sandbox Code Playgroud)

在 Rebol 中,this^ 会是读/二进制和写/二进制

 >> write %/c/alex.txt read http://google.com
 *** Access Error: invalid UTF-8 encoding: #{A050726F}
Run Code Online (Sandbox Code Playgroud)

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

Doc*_*bel 5

在 Rebol 中,this^ 会是读/二进制和写/二进制

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

 write/binary %/c/users/abagget/desktop/bay.jpg read/binary http://rebol.com/view/bay.jpg
Run Code Online (Sandbox Code Playgroud)

有没有办法将传入内容转换为 UTF-8,以便我可以进行读取?

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

bin-to-string: function [bin [binary!]][
    text: make string! length? bin
    foreach byte bin [append text to char! byte]
    text
]
Run Code Online (Sandbox Code Playgroud)

从控制台使用它:

>> bin-to-string read/binary http://google.com
== {<!doctype html><html itemscope="" itemtype="http://schema.org...
Run Code Online (Sandbox Code Playgroud)

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