Ruby can';t在没有格式问题的情况下将IP写入文本文件

Ruby can';t在没有格式问题的情况下将IP写入文本文件,ruby,Ruby,我无法从文本文件读取IP并将其正确写入另一个文本文件。它将文件中写入的IP显示为:“ÿþ1 9 2.1 6 8.1 1 1 0.4” 我已经试过了。剥去和。删除(“”),但运气不好。有人能看到这个问题吗 谢谢该文件是用Windows上的记事本生成的。它被编码为 文件中的前两个字节包含代码和;这是UTF-16LE的 每个字符按2个字节(16位)编码,最低有效字节排在第一位(较小的尾端顺序)。 输出中可打印字符之间的空格实际上是(代码为0的字符) 您可以做的(除了将文件转换为更合适的格式,如UTF-

我无法从文本文件读取IP并将其正确写入另一个文本文件。它将文件中写入的IP显示为:“ÿþ1 9 2.1 6 8.1 1 1 0.4”

我已经试过了。剥去和。删除(“”),但运气不好。有人能看到这个问题吗


谢谢

该文件是用Windows上的记事本生成的。它被编码为

文件中的前两个字节包含代码和;这是UTF-16LE的

每个字符按2个字节(16位)编码,最低有效字节排在第一位(较小的尾端顺序)。 输出中可打印字符之间的空格实际上是(代码为
0
的字符)

您可以做的(除了将文件转换为更合适的格式,如
UTF-8
甚至
ISO-8859-1
)是将
'rb:BOM | UTF-16LE'
作为

  • r
    告诉
    File#open
    以只读模式打开文件(默认情况下也是这样)
  • b
    表示“二进制模式”;
    BOM|UTF-16
    要求使用
  • :BOM | UTF-16LE
    告诉Ruby读取并忽略文件中存在的
    BOM
    ,并期望文件的其余部分编码为
    UTF16-LE


如果可以,我建议您使用合适的编辑器(甚至可以使用记事本)将文件编码转换为
UTF-8
ISO-8859-1
,所有这些问题都会消失。

该文件是在Windows上使用记事本生成的。它被编码为

文件中的前两个字节包含代码和;这是UTF-16LE的

每个字符按2个字节(16位)编码,最低有效字节排在第一位(较小的尾端顺序)。 输出中可打印字符之间的空格实际上是(代码为
0
的字符)

您可以做的(除了将文件转换为更合适的格式,如
UTF-8
甚至
ISO-8859-1
)是将
'rb:BOM | UTF-16LE'
作为

  • r
    告诉
    File#open
    以只读模式打开文件(默认情况下也是这样)
  • b
    表示“二进制模式”;
    BOM|UTF-16
    要求使用
  • :BOM | UTF-16LE
    告诉Ruby读取并忽略文件中存在的
    BOM
    ,并期望文件的其余部分编码为
    UTF16-LE


如果可以,我建议您使用合适的编辑器(甚至可以使用记事本)将文件编码转换为
UTF-8
ISO-8859-1
,所有这些问题都会消失。

文件似乎是在Windows上使用记事本生成的。它很可能被编码为
UTF-16LE
(可打印字符之间的空格为空字符)。该文件似乎是用Windows上的记事本生成的。它很可能被编码为
UTF-16LE
(可打印字符之间的空格为空字符)。非常感谢。就这样。非常感谢。
#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