2

我与几个外部服务集成,我通过 http 下载文件。我发现在我的系统中使用它们之前,我必须转换/清理文件的名称。所以我在代码的不同部分有这样的事情:

name = name.encode('UTF-8', 'ASCII-8BIT', invalid: :replace, undef: :replace, replace: '')
name = name.encode('UTF-8', 'ISO-8859-1', invalid: :replace, undef: :replace, replace: '')

在每种情况下,我都必须询问服务我应该期待什么编码。

这是解决此问题的唯一方法,还是有某种更标准和通用的方法来清理传入的字符串?

4

1 回答 1

0

在 Ruby 1.9.x 中有一个外部编码和一个内部编码,它们都默认为全局编码。外部文件被认为是配置的外部编码,并自动转换为内部编码。Encoding.default_external您可以通过和全局设置这些编码Encoding.default_internal。您可以在每个文件的基础上将它们指定为open方法的参数,如下例所示:

File.open('/path/to/some/file', 'r', external_encoding: 'US-ASCII', internal_encoding: 'UTF-8')

请注意,您也可以单独指定每一项。

有关其他信息,请参阅此博客文章

于 2012-12-07T04:59:11.483 回答