当前位置: 首页 > 知识库问答 >
问题:

使用open-uri指定默认字符集,但如果给定,请使用服务器提供的字符集

马嘉勋
2023-03-14

使用Ruby的open-uri中的open(),我想从不受我控制的任意服务器获取文件。服务器可以为文件指定Content-Type,例如文本/日历;charset=utf-8文本/日历;charset=ISO-8859-1,在这种情况下,我很高兴open()会相信字符集是服务器声称的任何内容。但是,如果服务器没有指定字符集,那么open()似乎假设字符集是“ASCII-8BIT”。我想让open()改为假设字符集是“UTF-8”(当没有指定字符集时),因为text/日历,即“iCal文件”,通常应该编码为“UTF-8”。

我强调只在没有指定字符集时假设字符集,因为我仍然希望尊重服务器的决定,可以选择以他们喜欢的任何字符集提供文件。

我试着打开(open()http://my-test-uri.test“,'r:UTF-8'),但这将无条件覆盖字符集,即使服务器指定了不同的字符集,如“ISO-8859-1”

共有1个答案

邹俊豪
2023-03-14

OpenURI::Meta#charset接受一个块,该块仅在服务器未指定字符集时才会返回字符集。

使用该信息,我们可以将open返回的StringIO的编码设置为与它相同的编码(冗余)或我们的默认编码:

open('http://localhost:3333').tap do |io|
  charset = io.charset { 'utf-8' }
  io.set_encoding(charset)
end
 类似资料:
  • 10.3.1. 服务器字符集和校对 10.3.2. 数据库字符集和校对 10.3.3. 表字符集和校对 10.3.4. 列字符集和校对 10.3.5. 字符集和校对分配示例 10.3.6. 连接字符集和校对 10.3.7. 字符串文字字符集和校对 10.3.8. 在SQL语句中使用COLLATE 10.3.9. COLLATE子句优先 10.3.10. BINARY操作符 10.3.11. 校对确

  • 问题内容: 我正在用Java编程 我的代码为: 在api中指定,如果不指定字符编码,它将采用默认的平台字符编码。 “默认平台字符编码”是什么意思? 它是Java编码还是OS编码? 如果这意味着操作系统编码,如何检查Windows和Linux的默认字符编码?无论如何,我们可以使用命令行获取默认的字符编码吗? 问题答案: 这表示您正在运行的JVM的默认字符编码, 要检查默认编码,您可以执行以下操作:

  • 没有用呢,中文的文件、文件夹仍会报错(malformed input off : 1, length : 1)。 这里都有注释的嘛,为什么会这样?

  • 我希望在给定空字符串时使用默认值。我希望有更优雅的东西,然后使用if语句检查<code>$Var 下面是我试图完成的一个片段。给定一个空字符串,我希望它打印“Var: DEFAULT”。

  • Logback 1.1.3留档没有指出如果用户不设置默认字符集,它将是什么,但源代码说: 默认情况下,此属性的值为null,对应于系统的默认字符集。 然而,我使用的是PatternLayoutCoder(带有滚动文件附加器),它似乎是以UTF-8格式输出文件(我的Windows 7 Professional系统的默认字符集可能不是UTF-8)。 UTF-8输出实际上是我想要的,但我想确保我不是偶然

  • 问题内容: 根据我对正则表达式的理解,字符串“ 00 ###”必须与“ [0-9]”匹配,但不能与“ ^ [0-9] $”匹配。但这不适用于Java regexp。 在对此问题进行了一些调查之后,我发现了以下信息(http://www.wellho.net/solutions/java-regular- expressions-in-java.html ): 似乎Java正则表达式默认同时带有^和