2017-07-24 15 views
0

我無法從文本文件中讀取IP並將其正確寫入其他文本文件。它示出了寫入IP的文件,如: 「ÿþ19 2 1 6 8 1 1 0 4。」無法將IP寫入文本文件而沒有格式問題

#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

該文件似乎是在Windows上使用記事本生成的。它的編碼很可能是'UTF-16LE'(可打印字符之間的空格是空字符)。 – axiac

回答

3

該文件是在Windows上用記事本生成的。它編碼爲UTF-16LE

該文件中的前兩個字節的代碼爲0xFF0xFE;這是UTF-16LEBytes Order Mark

每個字符在2個字節(16位)上編碼,最低有效字節在前(較少的Endian順序)。 輸出中可打印字符之間的空格實際上是NUL characters(代碼爲0的字符)。

你能做什麼(除了文件轉換爲像UTF-8甚至ISO-8859-1更體面格式)是通過'rb:BOM|UTF-16LE'File#open第二個參數。

  • r告訴File#open打開在只讀模式中的文件(這也是默認完成);
  • b表示「二進制模式」;它需要BOM|UTF-16;
  • :BOM|UTF-16LE告訴Ruby閱讀並忽略BOM,如果它存在於文件中並且期望文件的其餘部分被編碼爲UTF16-LE

如果可以的話,我建議你使用一個好的編輯器文件編碼轉換(連記事本都可以使用)來UTF-8ISO-8859-1,所有這些問題消失。

+0

就是這樣。謝謝! – SO03112