Module: Win32::Certstore::Mixin::String
- Included in:
- FFI::Pointer, Win32::Certstore, StoreBase
- Defined in:
- lib/win32/certstore/mixin/string.rb
Instance Method Summary collapse
Instance Method Details
#utf8_to_wide(ustring) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/win32/certstore/mixin/string.rb', line 30 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") if ustring.respond_to?(:force_encoding) && ustring.encoding.name != "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 = if ustring.respond_to?(:encode) ustring.encode("UTF-16LE") else require "iconv" Iconv.conv("UTF-16LE", "UTF-8", ustring) end ustring end |
#wide_to_utf8(wstring) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/win32/certstore/mixin/string.rb', line 48 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") if wstring.respond_to?(:force_encoding) # encode it all as UTF-8 wstring = if wstring.respond_to?(:encode) wstring.encode("UTF-8") else require "iconv" Iconv.conv("UTF-8", "UTF-16LE", wstring) end # remove trailing CRLF and NULL characters wstring.strip! wstring end |
#wstring(str) ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/win32/certstore/mixin/string.rb', line 22 def wstring(str) if str.nil? || str.encoding == Encoding::UTF_16LE str else utf8_to_wide(str) end end |