Way*_*rad 8 ruby unix windows encoding file
我的Unix Ruby程序需要编写一个将在Windows上运行的SqlServer读取的文件.我需要将我写入此文件的\r\n
行结束,DOS/Windows行结束,而不是\n
Unix行结束.我希望这发生在没有我必须手动将\ r \n添加到每行的末尾.
如果我的程序写入这样的文件:
File.open("/tmp/foo", "w") do |file|
file.puts "stuff"
end
Run Code Online (Sandbox Code Playgroud)
然后该文件具有Unix行结尾:
$ od -c foo
0000000 s t u f f \n
Run Code Online (Sandbox Code Playgroud)
这是预期的,因为我的程序在Unix上运行.但我需要这个文件(只有这个文件)有DOS行结尾.
如果我手动将\ r \n添加到每行:
File.open("/tmp/foo", "w") do |file|
file.puts "stuff\r"
end
Run Code Online (Sandbox Code Playgroud)
然后该文件有DOS行结尾:
$ od -c /tmp/foo
0000000 s t u f f \r \n
Run Code Online (Sandbox Code Playgroud)
这可行,但必须为我想写的每一行重复.
如此SO答案所示,我可以在编写之前使用String #coding修改字符串:
File.open("/tmp/foo", "w") do |file|
file.puts "alpha\nbeta\n".encode(crlf_newline: true)
end
Run Code Online (Sandbox Code Playgroud)
这导致DOS行结尾:
$ od -c /tmp/foo
0000000 a l p h a \r \n b e t a \r \n
Run Code Online (Sandbox Code Playgroud)
这样做的好处是,如果我一次写多行,则对#encode的一次调用将改变该一次写入的所有行结尾.但是,它很冗长,我仍然必须指定每次写入的结束行.
如何让每个Unix中puts
的打开文件结束Windows 行结尾的行而不是Unix'\n'行结束?\r\n
我正在运行Ruby 2.3.1.
tad*_*man 12
有一个选项,你正在使用的同一个encode
也适用于File.open
:
File.open('/tmp/foo', mode: 'w', crlf_newline: true) do |file|
file.puts("alpha")
file.puts("beta")
end
Run Code Online (Sandbox Code Playgroud)
此选项不仅会结束行\r\n
,还会将任何显式\n
转换为\r\n
.所以这:
file.puts("alpha\nbar")
Run Code Online (Sandbox Code Playgroud)
将会写 alpha\r\nbar\r\b