- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我这样做时:
require 'open-uri'
response = open('some-html-page-url-here')
response.read
在某个 url 上我收到以下错误(由于返回的 url 中的编码错误?!):
Encoding::UndefinedConversionError: U+00A0 from UTF-8 to US-ASCII
有什么方法可以解决此问题以仍然获取 html 内容?
最佳答案
在 open-uri 模块的介绍中,文档是这样说的,
It is possible to open an http, https or ftp URL as though it were a file
如果您了解有关读取文件的任何知识,那么您必须知道您尝试读取的文件的编码。您需要知道编码,以便告诉 ruby 如何读取文件(即每个字符将占用多少字节(或多少空间))。
在文档的第一个代码示例中,有这样的:
open("http://www.ruby-lang.org/en") {|f|
f.each_line {|line| p line}
p f.base_uri # <URI::HTTP:0x40e6ef2 URL:http://www.ruby-lang.org/en/>
p f.content_type # "text/html"
p f.charset # "iso-8859-1"
p f.content_encoding # []
p f.last_modified # Thu Dec 05 02:45:02 UTC 2002
}
因此,如果您不知道要读取的"file"的编码,您可以使用 f.charset
获取编码。如果该编码不同于您的默认外部编码
,您很可能会收到错误。您的 default external encoding
是 ruby 用于从外部源读取的编码。您可以检查您的默认外部编码设置如下:
The default external Encoding is pulled from your environment...Have a look:
$ echo $LC_CTYPE
en_US.UTF-8
或
$ ruby -e 'puts Encoding.default_external.name'
UTF-8
http://graysoftinc.com/character-encodings/ruby-19s-three-default-encodings
在 Mac OSX 上,我实际上必须执行以下操作才能查看默认的外部编码:
$ echo $LANG
您可以使用 Encoding.default_external=()
方法设置您的默认外部编码,因此您可能想尝试这样的事情:
open('some_url_here') do |f|
Encoding.default_external = f.charset
html = f.read
end
将一个 IO 对象设置为 binmode,就像您所做的那样,告诉 ruby 文件的编码是 BINARY(或 ruby 令人困惑的同义词 ASCII-8BIT),这意味着您告诉 ruby 文件中的每个字符占用一个字节。在你的例子中,你告诉 ruby 读取字符 U+00A0,它的 UTF-8 表示占用两个字节 0xC2 0xA0
,作为两个字符而不是一个字符,所以你已经消除了你的错误, 但你产生了两个垃圾字符而不是原始字符。
关于ruby - Encoding::UndefinedConversionError 使用 open-uri 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936452/
使用 ruby 1.9.2-p290。我在尝试解析如下 URI 时遇到问题: require 'uri' my_uri = "http://www.anyserver.com/getdata?anyp
根据 http://tools.ietf.org/html/rfc3986和 http://en.wikipedia.org/wiki/Uniform_resource_identifier , UR
如何在文本 block 中发现 URI? 这个想法是将这样的文本运行变成链接。如果只考虑 http(s) 和 ftp(s) 方案,这很容易做到;但是,我猜测一般问题(考虑 tel、mailto 和其他
我的一些网址上有一些特殊字符。例如: http://blabla.com/title/?t=burası 当我从其他页面提供指向该页面的链接时,我使用: URI.encode(s) 产生这个链接: /
我在 Windows Mobile 上使用紧凑型框架/C#。 在我的应用程序中,我通过序列化对象并使用 HttpWebRequest/POST 请求向上发送信息来将数据上传到服务器。在服务器上,发布数
我正在做一个实验,我发现将 Canvas 转换为 blob,然后转换为数据 URI 会导致与直接从 Canvas 获取数据 URI 不同的 URI。打开时的内容在两个 URI 上几乎相同。 使用 bl
我正在尝试在 Rails 3 中实现 OAuth 提供程序。当我尝试授权客户端应用程序时,出现此错误。我正在使用 RESTful auth 插件和 pelles OAuth 插件。当我通过 Rails
我有一个编码的 UI 测试方法: public void MyTestMethod() { string baseUrl = "www.google.com"; GlobalVaria
我知道这是一个常见的错误,我正在使用一个已知的解决方案,但它仍然给我同样的错误: require 'open-uri' url = "http://website.com/dirs/filex[a]"
我正在尝试使用 .NET 中的 HttpClient 来使用 Web 服务,并且在我完成了 msdn 中提到的所有步骤之后 o 出现以下异常:提供了无效的请求 URI。请求 URI 必须是绝对 URI
我正在尝试检索文件的 URI。该文件存储在: /storage/emulated/0/AppName/FileName.png 如果我使用 Uri.fromFile(file),我得到的是 file:
我想知道 (SIP) URI 中的不同参数分隔符表示什么? 部分以;分隔,例如: . 其他用?隔开和 & ,例如: 最佳答案 SIP 分隔符规则来自RFC 2396 RFC 3986 已弃用.但是在
我想调用decodeUrl(...),我这样做是: import "dart:uri"; main() { decodeUrl("str"); } 但是现在有了最新的Dart-SDK,它会报告
在 URI 中,空格可以编码为 + .既然如此,那么在创建具有国际前缀的 tel URI 时是否应该对前导加号进行编码? 哪个更好?两者在实践中都有效吗? Call me Call me 最佳答案 不
我试图弄清楚电子邮件地址的格式是否可以说符合 URI 的定义,但到目前为止我还没有找到明确的确认。我希望有人可以在这里为我提供一些见解。预先感谢:) 最佳答案 是的,但带有“mailto:”前缀。 U
因此,我尝试将 ID 参数附加到 URI 的末尾,当用户单击我的列表中的项目时,用户将被发送到该 URI。我的代码如下: public void onItemClick(AdapterView par
这是 Converting file path to URI 的后续问题. 考虑: require 'uri' uri = URI.join('file:///', '/home/user/dir1/
我在 pl/sql 中创建了一个名为 tester 的包。但我收到以下消息。 绝对URI中的相对路径:java.net.URI.checkPath(URI.java:1823) --Package D
我在 gitlab 上有一个 git repo,使用私有(private) pod 和其他公共(public) pod,下面是我的 Podfile source 'git@gitlab.mycompa
我正在尝试将我的 Rails 应用程序推送到 heroku 上,我正在使用 heroku RedisToGo 附加组件我经历过这个tutorial并完成了那里提到的所有步骤。 但是在推送 heroku
我是一名优秀的程序员,十分优秀!