Module: Chef::Mixin::WideString
- Included in:
- WindowsEnvHelper, ReservedNames::Win32::Security, ReservedNames::Win32::Security, Util::Windows::LogonSession, Win32::Registry, Win32::Registry, FFI::Pointer, ReservedNames::Win32::File, ReservedNames::Win32::File, ReservedNames::Win32::Net, ReservedNames::Win32::Net, String
- Defined in:
- lib/chef/mixin/wide_string.rb
Instance Method Summary collapse
Instance Method Details
#utf8_to_wide(ustring) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 |
# 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) ⇒ Object
43 44 45 46 47 48 49 50 |
# 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) ⇒ Object
23 24 25 26 27 28 29 |
# 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 |