Кодировка файла Ascii-8bit в Utf-8 - PullRequest
0 голосов
/ 10 февраля 2020

Между тем, xml файл кажется закодированным в формате utf-8 на Windows Os (замечен в 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 #}}}

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '' '*' * '*' * '*' * '' 101 '*' * '* *' * '' 101. * * * ". :

> Présent dernière vérification 
> Default external: #<Encoding:UTF-8>
> Default internal: nil 
> Locale charmap:   "CP1252" LANG environment
> variable: "FR"

1 Ответ

0 голосов
/ 10 февраля 2020

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 #}}}
...