1

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

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

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

在 Rebol 中,这 ^ 将是读/二进制和写/二进制

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

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

4

1 回答 1

4

在 Rebol 中,这 ^ 将是读/二进制和写/二进制

在 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

有没有办法将传入的内容转换为 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
]

从控制台使用它:

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

Red 将来会为常用的文本编码提供适当的转换器。同时,您可以使用此类功能,或为您最常用的编码编写适当的解码器(使用转换表)。

于 2017-04-13T04:20:39.647 回答