我无法从文本文件中读取IP并将其正确写入另一个文本文件。它将文件中写入的IP显示为:“ÿþ19 2。1 6 8. 1 1 0.4”
#Read the first line for the IP
def get_server_ip
File.open("d:\\ip_addr.txt") do |line|
a = line.readline()
b = a.to_s
end
end
#append the ip to file2
def append_ip
FileUtils.cp('file1.txt', 'file2.txt')
file_names = ['file2.txt']
file_names.each do |file_name|
text = File.read(file_name)
b = get_server_ip
new_contents = text.gsub('ip_here', b)
File.open(file_name, "w") {|file| file.puts new_contents }
end
end
我试过.strip和.delete('')没有运气。有谁能看到这个问题?
谢谢
答案 0 :(得分:3)
该文件是在Windows上使用记事本生成的。它编码为UTF-16LE
。
文件中的前两个字节包含代码0xFF
和0xFE
;这是UTF-16LE
的{{3}}。
每个字符编码为2个字节(16位),最低有效字节编码(Less Endian顺序)。
输出中可打印字符之间的空格实际上是Bytes Order Mark(代码为0
的字符)。
您可以做的事情(除了将文件转换为更合适的格式,例如UTF-8
甚至ISO-8859-1
)是将'rb:BOM|UTF-16LE'
作为NUL
characters的第二个参数传递
r
告诉File#open
以只读模式打开文件(默认情况下也是如此); b
表示“二进制模式”;它是BOM|UTF-16
; :BOM|UTF-16LE
告诉Ruby读取并忽略文件中存在的BOM
,并期望文件的其余部分编码为UTF16-LE
。如果可以的话,我建议你使用一个不错的编辑器(甚至可以使用记事本)将文件编码转换为UTF-8
或ISO-8859-1
,所有这些问题都会消失。