文件编码将Ascii-8bit编码为Utf-8

问题描述 投票:0回答:1

同时xml文件似乎在Windows Os上以utf-8格式编码(在NotePad ++中可见),输出该文件的某些内容,将ascii-8bit读取,严重地返回了输出文件。

xml = Ox.load_file(ENV["HOME"] + '/desktop/sample.xml', mode: :generic, with_xml: true )

outcsv=[]
string = xml.FOO.BAR.text
outcsv.push(string)
outcsv.push( "Default external: #{Encoding.default_external.inspect}" )
outcsv.push( "Default internal: #{Encoding.default_internal.inspect}" )
outcsv.push( "Locale charmap:   #{Encoding.locale_charmap.inspect}"   )
outcsv.push( "LANG environment variable: #{ENV['LANG'].inspect}" )
p outcsv.count

def exportCsv (arr) #{{{

  outcsvpath = ENV['HOME'].to_s+'/desktop/out.csv'
  f = File.new(outcsvpath, File::RDWR|File::CREAT, 0644)
  arr.each { |row|
    f.puts(row.to_s.force_encoding('cp1252').encode('utf-8'))  #iso-8859-1
  }
  f.close()

end #}}}

xml输入:

当前dernièrevérification底部文字

输出文本行和默认编码:

> Présent dernière vérification 
> Default external: #<Encoding:UTF-8>
> Default internal: nil 
> Locale charmap:   "CP1252" LANG environment
> variable: "FR"
ruby file encoding ascii-8bit
1个回答
0
投票

Windows 10和示例在这里:https://drive.google.com/open?id=1Ahtw6MiiN5uG_8-6GdaqQf4M7Hc9r61g

似乎可以使用此代码:

require 'ox'

#Encoding.default_external = Encoding.find('utf-8')
#Encoding.default_internal = Encoding.find('utf-8')


# 1. Xml Generic Mode
xml = Ox.load_file(ENV["HOME"] + '/desktop/sample.xml', mode: :generic, with_xml: true )

outcsv=[]
string = xml.FOO.BAR.text
outcsv.push( string )
outcsv.push( "Default external: #{Encoding.default_external.inspect}" )
outcsv.push( "Default internal: #{Encoding.default_internal.inspect}" )
outcsv.push( "Locale charmap:   #{Encoding.locale_charmap.inspect}"   )
outcsv.push( "LANG environment variable: #{ENV['LANG'].inspect}"      )
p outcsv.count

def exportCsv (arr) #{{{

  outcsvpath = ENV['HOME'].to_s+'/desktop/out.csv'
  f = File.new(outcsvpath, File::RDWR|File::CREAT, 0644)
  arr.each { |row|
    f.puts(row.to_s) #.force_encoding('Windows-1252').encode('utf-8'))  #iso-8859-1
  }
  f.close()
end #}}}
© www.soinside.com 2019 - 2024. All rights reserved.