module Chef::ReservedNames::Win32::API::Unicode

Constants

ANSI_CHARSET
ARABIC_CHARSET
CHINESEBIG5_CHARSET
CP_ACP

Win32 API Constants

CP_MACCP
CP_OEMCP
CP_SYMBOL
CP_THREAD_ACP
CP_UTF7
CP_UTF8
DEFAULT_CHARSET
EASTEUROPE_CHARSET
GB2312_CHARSET
GREEK_CHARSET
HANGEUL_CHARSET
HANGUL_CHARSET
HEBREW_CHARSET
IS_TEXT_UNICODE_ASCII16
IS_TEXT_UNICODE_CONTROLS
IS_TEXT_UNICODE_DBCS_LEADBYTE
IS_TEXT_UNICODE_ILLEGAL_CHARS
IS_TEXT_UNICODE_NOT_ASCII_MASK
IS_TEXT_UNICODE_NOT_UNICODE_MASK
IS_TEXT_UNICODE_NULL_BYTES
IS_TEXT_UNICODE_ODD_LENGTH
IS_TEXT_UNICODE_REVERSE_ASCII16
IS_TEXT_UNICODE_REVERSE_CONTROLS
IS_TEXT_UNICODE_REVERSE_MASK
IS_TEXT_UNICODE_REVERSE_SIGNATURE
IS_TEXT_UNICODE_REVERSE_STATISTICS
IS_TEXT_UNICODE_SIGNATURE
IS_TEXT_UNICODE_STATISTICS
IS_TEXT_UNICODE_UNICODE_MASK
JOHAB_CHARSET
MB_COMPOSITE
MB_ERR_INVALID_CHARS
MB_PRECOMPOSED
MB_USEGLYPHCHARS
OEM_CHARSET
RUSSIAN_CHARSET
SHIFTJIS_CHARSET
SYMBOL_CHARSET
TCI_SRCCHARSET
TCI_SRCCODEPAGE
TCI_SRCFONTSIG
TCI_SRCLOCALE
THAI_CHARSET
TURKISH_CHARSET
VIETNAMESE_CHARSET
WC_COMPOSITECHECK
WC_DEFAULTCHAR
WC_DISCARDNS
WC_NO_BEST_FIT_CHARS
WC_SEPCHARS

Public Instance Methods

utf8_to_wide(ustring) click to toggle source

Helpers

# File lib/chef/win32/api/unicode.rb, line 136
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 = ustring + "\000\000" if ustring[-1].chr != "\000"

  # encode it all as UTF-16LE AKA Windows Wide Character AKA Windows Unicode
  ustring = begin
    if ustring.respond_to?(:encode)
      ustring.encode('UTF-16LE')
    else
      require 'iconv'
      Iconv.conv("UTF-16LE", "UTF-8", ustring)
    end
  end
  ustring
end
wide_to_utf8(wstring) click to toggle source
# File lib/chef/win32/api/unicode.rb, line 156
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 = begin
    if wstring.respond_to?(:encode)
      wstring.encode('UTF-8')
    else
      require 'iconv'
      Iconv.conv("UTF-8", "UTF-16LE", wstring)
    end
  end
  # remove trailing CRLF and NULL characters
  wstring.strip!
  wstring
end