使用 Kernel.puts 将 Ruby IO 重定向到文件,如何确保存储文件的编码类型为 ANSI 或 UTF-8

Ruby IO redirection to a file by using Kernel.puts,How can I ensure that the stored file's encoding type is ANSI or UTF-8

提问人:Jason 提问时间:12/31/2022 最后编辑:Jason 更新时间:1/4/2023 访问量:93

问:

在windows: visual studio code IDE中,我写了这样的命令:

ruby -E UTF-8 -e “把'汤姆,欢迎来到我家'”> test.txt

,然后我使用命令:

ruby -E UTF-8 -e “put gets” < test.txt

,但读取时出现错误代码。喜欢:

ķ,欢迎来到我的家。

enter image description here

最后,我发现“test.txt”文件的编码类型是unicode。

如果我坚持使用IO重定向到文件并选择kernel.puts,如何确保存储文件的编码类型为UTF-8?

如何确保重定向后的文件编码类型为 UTF-8?请帮帮我。

Ruby 重定向 编码 IO 错误代码

评论

0赞 steenslag 12/31/2022
也许是可怕的 BOM(字节顺序标记)。
0赞 mklement0 1/4/2023
@steenslag,不,它与活动代码页有关,必须首先将其设置为 UTF-8(仅适用于(命令提示符),不适用于 PowerShell)。chcp 65001cmd.exe
0赞 Jason 1/5/2023
嗯......你是对的。

答:

0赞 mklement0 1/4/2023 #1

屏幕截图暗示你使用的是旧版 Windows shell cmd.exe(命令提示符)。[1]

默认情况下,它使用系统的活动旧版 OEM 代码页,该代码页通常是限制为 256 个字符的固定 8 位字符编码,即单字节编码,例如,在运行 时报告的 US-English 系统上的代码页 437chcp

如果希望cmd.exe改用 UTF-8 编码,请先运行 chcp 65001


有关 PowerShell(新式后继者)的字符编码注意事项,请参阅后面相关问题的答案cmd.exe


[1] 这由两个事实暗示:屏幕截图中的提示字符串看起来像 C:\path>并且后面没有空格(不像在 PowerShell 中,它前面也以 PS 开头),并且你成功地将 < 用于输入重定向,在 cmd.exe 和 PowerShell 之间,只有cmd.exe支持(在 PowerShell 中,它会导致错误)。

评论

1赞 Jason 1/5/2023
是的,你是对的。注册cmd.exe