module Chef::Mixin::WideString

Public Instance Methods

utf8_to_wide(ustring) click to toggle source
# File lib/chef/mixin/wide_string.rb, line 31
def utf8_to_wide(ustring)
  # ensure it is actually UTF-8
  # Ruby likes to mark binary data as ASCII-8BIT
  ustring = (ustring + "").force_encoding("UTF-8")

  # ensure we have the double-null termination Windows Wide likes
  ustring += "\000\000" if ustring.length == 0 || ustring[-1].chr != "\000"

  # encode it all as UTF-16LE AKA Windows Wide Character AKA Windows Unicode
  ustring.encode("UTF-16LE")
end
wide_to_utf8(wstring) click to toggle source
# File lib/chef/mixin/wide_string.rb, line 43
def wide_to_utf8(wstring)
  # ensure it is actually UTF-16LE
  # Ruby likes to mark binary data as ASCII-8BIT
  wstring = wstring.force_encoding("UTF-16LE")

  # encode it all as UTF-8 and remove trailing CRLF and NULL characters
  wstring.encode("UTF-8").strip
end
wstring(str) click to toggle source
# File lib/chef/mixin/wide_string.rb, line 23
def wstring(str)
  if str.nil? || str.encoding == Encoding::UTF_16LE
    str
  else
    utf8_to_wide(str)
  end
end