如何在Ruby中设置标准输入的编码

5
我希望我的脚本能够从标准输入获取数据,这些数据可能以UTF8或UTF16编码提供。例如: 数据来源 | my-script -e utf8 我该如何设置stdin的外部编码?

1
你可以执行"ruby -Eutf8 script.rb"。这是你所要求的吗? :) - Arup Rakshit
1
这在IO.new文档中有详细说明。该方法中详细的信息适用于其他“读取”类型的方法,例如readgetsforeach - the Tin Man
@arup:是的,那可能行得通。但如果脚本在设置编码之前需要做出一些决策,它将需要遵循 Tin Man 的建议。 - Martin
1个回答

2
在脚本的第一行中定义ruby解释器时,您可以添加--encoding utf-8参数以指定stdin编码。

例子:

#!/usr/bin/env ruby --encoding utf-8

text = ARGF.read

来自man ruby:

 -E external[:internal]
 --encoding external[:internal]
                Specifies the default value(s) for external encodings and
                internal encoding. Values should be separated with colon
                (:).

                You can omit the one for internal encodings, then the
                value (Encoding.default_internal) will be nil.

1
这在 MacOS 上运行得很好,但在 Linux 上会失败,因为 Linux 不能处理 shebang 中超过一个参数的情况。请参见 此 SO 答案 - Ritchie
这仍然有效!为我解决了一个问题,即在“macOS Mojave 10.14”上从“Karabiner-Elements.app”或“Automator.app”调用Ruby脚本失败,因为出现了“US-ASCII(ArgumentError)中的无效字节序列”错误。谢谢! - Steph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接